summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Shadura <andrew.shadura@collabora.co.uk>2017-10-21 18:24:48 +0100
committerAndrew Shadura <andrew.shadura@collabora.co.uk>2017-10-21 18:24:48 +0100
commit332a2fb2eb188251bd4fdaa7cfc474903bed87f0 (patch)
tree63a51cbbd61e07bd8ad52459ebcebfb99514ca17
parentf8ba1cceab52e3a7b3dd2457ae589f49a9d51c5e (diff)
parent50045e3a634ec84d672edeab57594659e5a293ac (diff)
Merge tag 'upstream/0.0_git20171019.0.bdcc60b'
Upstream version 0.0~git20171019.0.bdcc60b
-rw-r--r--codec/0doc.go92
-rw-r--r--codec/README.md42
-rw-r--r--codec/binc.go68
-rw-r--r--codec/cbor.go82
-rw-r--r--codec/codec_test.go1140
-rw-r--r--codec/codecgen/README.md1
-rw-r--r--codec/codecgen/gen.go78
-rw-r--r--codec/codecgen_test.go24
-rw-r--r--codec/decode.go2471
-rw-r--r--codec/encode.go1424
-rw-r--r--codec/fast-path.generated.go38474
-rw-r--r--codec/fast-path.go.tmpl373
-rw-r--r--codec/fast-path.not.go15
-rw-r--r--codec/gen-dec-array.go.tmpl104
-rw-r--r--codec/gen-dec-map.go.tmpl42
-rw-r--r--codec/gen-helper.generated.go63
-rw-r--r--codec/gen-helper.go.tmpl56
-rw-r--r--codec/gen.generated.go146
-rw-r--r--codec/gen.go499
-rw-r--r--codec/goversion_arrayof_gte_go15.go14
-rw-r--r--codec/goversion_arrayof_lt_go15.go14
-rw-r--r--codec/goversion_makemap_gte_go19.go15
-rw-r--r--codec/goversion_makemap_lt_go19.go12
-rw-r--r--codec/goversion_unsupported_lt_go14.go17
-rw-r--r--codec/goversion_vendor_eq_go15.go10
-rw-r--r--codec/goversion_vendor_eq_go16.go10
-rw-r--r--codec/goversion_vendor_gte_go17.go8
-rw-r--r--codec/goversion_vendor_lt_go15.go8
-rw-r--r--codec/helper.go1119
-rw-r--r--codec/helper_internal.go25
-rw-r--r--codec/helper_not_unsafe.go138
-rw-r--r--codec/helper_test.go141
-rw-r--r--codec/helper_unsafe.go397
-rw-r--r--codec/json.go1233
-rw-r--r--codec/mammoth-test.go.tmpl33
-rw-r--r--codec/mammoth_generated_test.go593
-rw-r--r--codec/msgpack.go104
-rw-r--r--codec/noop.go7
-rw-r--r--codec/prebuild.go3
-rwxr-xr-xcodec/prebuild.sh199
-rw-r--r--codec/py_test.go2
-rw-r--r--codec/rpc.go37
-rw-r--r--codec/shared_test.go284
-rw-r--r--codec/simple.go54
-rwxr-xr-xcodec/test.py26
-rwxr-xr-xcodec/tests.sh80
-rw-r--r--codec/time.go57
-rw-r--r--codec/values_flex_test.go69
-rw-r--r--codec/values_test.go347
-rw-r--r--codec/x_bench_gen_test.go123
-rw-r--r--codec/xml.go426
-rw-r--r--codec/z.go23
-rw-r--r--codec/z_all_test.go266
-rw-r--r--codec/z_all_x_bench_gen_test.go49
54 files changed, 24843 insertions, 26294 deletions
diff --git a/codec/0doc.go b/codec/0doc.go
index 7f71f0e..cfb804e 100644
--- a/codec/0doc.go
+++ b/codec/0doc.go
@@ -2,8 +2,8 @@
// Use of this source code is governed by a MIT license found in the LICENSE file.
/*
-High Performance, Feature-Rich Idiomatic Go codec/encoding library for
-binc, msgpack, cbor, json.
+High Performance, Feature-Rich Idiomatic Go 1.4+ codec/encoding library for
+binc, msgpack, cbor, json
Supported Serialization formats are:
@@ -11,21 +11,17 @@ Supported Serialization formats are:
- binc: http://github.com/ugorji/binc
- cbor: http://cbor.io http://tools.ietf.org/html/rfc7049
- json: http://json.org http://tools.ietf.org/html/rfc7159
- - simple:
+ - simple:
To install:
go get github.com/ugorji/go/codec
-This package understands the 'unsafe' tag, to allow using unsafe semantics:
-
- - When decoding into a struct, you need to read the field name as a string
- so you can find the struct field it is mapped to.
- Using `unsafe` will bypass the allocation and copying overhead of []byte->string conversion.
-
-To install using unsafe, pass the 'unsafe' tag:
-
- go get -tags=unsafe github.com/ugorji/go/codec
+This package will carefully use 'unsafe' for performance reasons in specific places.
+You can build without unsafe use by passing the safe or appengine tag
+i.e. 'go install -tags=safe ...'. Note that unsafe is only supported for the last 3
+go sdk versions e.g. current go release is go 1.9, so we support unsafe use only from
+go 1.7+ . This is because supporting unsafe requires knowledge of implementation details.
For detailed usage information, read the primer at http://ugorji.net/blog/go-codec-primer .
@@ -35,12 +31,17 @@ the standard library (ie json, xml, gob, etc).
Rich Feature Set includes:
- Simple but extremely powerful and feature-rich API
+ - Support for go1.4 and above, while selectively using newer APIs for later releases
+ - Good code coverage ( > 70% )
- Very High Performance.
Our extensive benchmarks show us outperforming Gob, Json, Bson, etc by 2-4X.
+ - Careful selected use of 'unsafe' for targeted performance gains.
+ 100% mode exists where 'unsafe' is not used at all.
+ - Lock-free (sans mutex) concurrency for scaling to 100's of cores
- Multiple conversions:
- Package coerces types where appropriate
+ Package coerces types where appropriate
e.g. decode an int in the stream into a float, etc.
- - Corner Cases:
+ - Corner Cases:
Overflows, nil maps/slices, nil values in streams are handled correctly
- Standard field renaming via tags
- Support for omitting empty fields during an encoding
@@ -56,7 +57,7 @@ Rich Feature Set includes:
- Fast (no-reflection) encoding/decoding of common maps and slices
- Code-generation for faster performance.
- Support binary (e.g. messagepack, cbor) and text (e.g. json) formats
- - Support indefinite-length formats to enable true streaming
+ - Support indefinite-length formats to enable true streaming
(for formats which support it e.g. json, cbor)
- Support canonical encoding, where a value is ALWAYS encoded as same sequence of bytes.
This mostly applies to maps, where iteration order is non-deterministic.
@@ -68,12 +69,12 @@ Rich Feature Set includes:
- Encode/Decode from/to chan types (for iterative streaming support)
- Drop-in replacement for encoding/json. `json:` key in struct tag supported.
- Provides a RPC Server and Client Codec for net/rpc communication protocol.
- - Handle unique idiosynchracies of codecs e.g.
- - For messagepack, configure how ambiguities in handling raw bytes are resolved
- - For messagepack, provide rpc server/client codec to support
+ - Handle unique idiosyncrasies of codecs e.g.
+ - For messagepack, configure how ambiguities in handling raw bytes are resolved
+ - For messagepack, provide rpc server/client codec to support
msgpack-rpc protocol defined at:
https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md
-
+
Extension Support
Users can register a function to handle the encoding or decoding of
@@ -160,40 +161,25 @@ Sample usage model:
//OR rpcCodec := codec.MsgpackSpecRpc.ClientCodec(conn, h)
client := rpc.NewClientWithCodec(rpcCodec)
+Running Tests
+
+To run tests, use the following:
+
+ go test
+
+To run the full suite of tests, use the following:
+
+ go test -tags alltests -run Suite
+
+You can run the tag 'safe' to run tests or build in safe mode. e.g.
+
+ go test -tags safe -run Json
+ go test -tags "alltests safe" -run Suite
+
+Running Benchmarks
+
+Please see http://github.com/ugorji/go-codec-bench .
+
*/
package codec
-// Benefits of go-codec:
-//
-// - encoding/json always reads whole file into memory first.
-// This makes it unsuitable for parsing very large files.
-// - encoding/xml cannot parse into a map[string]interface{}
-// I found this out on reading https://github.com/clbanning/mxj
-
-// TODO:
-//
-// - optimization for codecgen:
-// if len of entity is <= 3 words, then support a value receiver for encode.
-// - (En|De)coder should store an error when it occurs.
-// Until reset, subsequent calls return that error that was stored.
-// This means that free panics must go away.
-// All errors must be raised through errorf method.
-// - Decoding using a chan is good, but incurs concurrency costs.
-// This is because there's no fast way to use a channel without it
-// having to switch goroutines constantly.
-// Callback pattern is still the best. Maybe cnsider supporting something like:
-// type X struct {
-// Name string
-// Ys []Y
-// Ys chan <- Y
-// Ys func(interface{}) -> call this interface for each entry in there.
-// }
-// - Consider adding a isZeroer interface { isZero() bool }
-// It is used within isEmpty, for omitEmpty support.
-// - Consider making Handle used AS-IS within the encoding/decoding session.
-// This means that we don't cache Handle information within the (En|De)coder,
-// except we really need it at Reset(...)
-// - Consider adding math/big support
-// - Consider reducing the size of the generated functions:
-// Maybe use one loop, and put the conditionals in the loop.
-// for ... { if cLen > 0 { if j == cLen { break } } else if dd.CheckBreak() { break } }
diff --git a/codec/README.md b/codec/README.md
index a790a52..cadc41b 100644
--- a/codec/README.md
+++ b/codec/README.md
@@ -15,17 +15,11 @@ To install:
go get github.com/ugorji/go/codec
-This package understands the `unsafe` tag, to allow using unsafe semantics:
-
- - When decoding into a struct, you need to read the field name as a string
- so you can find the struct field it is mapped to.
- Using `unsafe` will bypass the allocation and copying overhead of `[]byte->string` conversion.
-
-To use it, you must pass the `unsafe` tag during install:
-
-```
-go install -tags=unsafe github.com/ugorji/go/codec
-```
+This package will carefully use 'unsafe' for performance reasons in specific places.
+You can build without unsafe use by passing the safe or appengine tag
+i.e. 'go install -tags=safe ...'. Note that unsafe is only supported for the last 3
+go sdk versions e.g. current go release is go 1.9, so we support unsafe use only from
+go 1.7+ . This is because supporting unsafe requires knowledge of implementation details.
Online documentation: http://godoc.org/github.com/ugorji/go/codec
Detailed Usage/How-to Primer: http://ugorji.net/blog/go-codec-primer
@@ -36,8 +30,13 @@ the standard library (ie json, xml, gob, etc).
Rich Feature Set includes:
- Simple but extremely powerful and feature-rich API
+ - Support for go1.4 and above, while selectively using newer APIs for later releases
+ - Good code coverage ( > 70% )
- Very High Performance.
Our extensive benchmarks show us outperforming Gob, Json, Bson, etc by 2-4X.
+ - Careful selected use of 'unsafe' for targeted performance gains.
+ 100% mode exists where 'unsafe' is not used at all.
+ - Lock-free (sans mutex) concurrency for scaling to 100's of cores
- Multiple conversions:
Package coerces types where appropriate
e.g. decode an int in the stream into a float, etc.
@@ -68,7 +67,7 @@ Rich Feature Set includes:
- Encode/Decode from/to chan types (for iterative streaming support)
- Drop-in replacement for encoding/json. `json:` key in struct tag supported.
- Provides a RPC Server and Client Codec for net/rpc communication protocol.
- - Handle unique idiosynchracies of codecs e.g.
+ - Handle unique idiosyncrasies of codecs e.g.
- For messagepack, configure how ambiguities in handling raw bytes are resolved
- For messagepack, provide rpc server/client codec to support
msgpack-rpc protocol defined at:
@@ -146,3 +145,22 @@ Typical usage model:
//OR rpcCodec := codec.MsgpackSpecRpc.ClientCodec(conn, h)
client := rpc.NewClientWithCodec(rpcCodec)
+## Running Tests
+
+To run tests, use the following:
+
+ go test
+
+To run the full suite of tests, use the following:
+
+ go test -tags alltests -run Suite
+
+You can run the tag 'safe' to run tests or build in safe mode. e.g.
+
+ go test -tags safe -run Json
+ go test -tags "alltests safe" -run Suite
+
+## Running Benchmarks
+
+Please see http://github.com/ugorji/go-codec-bench .
+
diff --git a/codec/binc.go b/codec/binc.go
index 766d26c..be5b7d3 100644
--- a/codec/binc.go
+++ b/codec/binc.go
@@ -61,7 +61,8 @@ type bincEncDriver struct {
m map[string]uint16 // symbols
b [scratchByteArrayLen]byte
s uint16 // symbols sequencer
- encNoSeparator
+ // encNoSeparator
+ encDriverNoopContainerWriter
}
func (e *bincEncDriver) IsBuiltinType(rt uintptr) bool {
@@ -195,11 +196,11 @@ func (e *bincEncDriver) encodeExtPreamble(xtag byte, length int) {
e.w.writen1(xtag)
}
-func (e *bincEncDriver) EncodeArrayStart(length int) {
+func (e *bincEncDriver) WriteArrayStart(length int) {
e.encLen(bincVdArray<<4, uint64(length))
}
-func (e *bincEncDriver) EncodeMapStart(length int) {
+func (e *bincEncDriver) WriteMapStart(length int) {
e.encLen(bincVdMap<<4, uint64(length))
}
@@ -332,13 +333,14 @@ type bincDecDriver struct {
bd byte
vd byte
vs byte
- noStreamingCodec
- decNoSeparator
+ // noStreamingCodec
+ // decNoSeparator
b [scratchByteArrayLen]byte
// linear searching on this slice is ok,
// because we typically expect < 32 symbols in each stream.
s []bincDecSymbol
+ decDriverNoopContainerReader
}
func (d *bincDecDriver) readNextBd() {
@@ -348,7 +350,17 @@ func (d *bincDecDriver) readNextBd() {
d.bdRead = true
}
+func (d *bincDecDriver) uncacheRead() {
+ if d.bdRead {
+ d.r.unreadn1()
+ d.bdRead = false
+ }
+}
+
func (d *bincDecDriver) ContainerType() (vt valueType) {
+ if !d.bdRead {
+ d.readNextBd()
+ }
if d.vd == bincVdSpecial && d.vs == bincSpNil {
return valueTypeNil
} else if d.vd == bincVdByteArray {
@@ -502,7 +514,7 @@ func (d *bincDecDriver) DecodeInt(bitsize uint8) (i int64) {
i = -i
}
if chkOvf.Int(i, bitsize) {
- d.d.errorf("binc: overflow integer: %v", i)
+ d.d.errorf("binc: overflow integer: %v for num bits: %v", i, bitsize)
return
}
d.bdRead = false
@@ -573,6 +585,9 @@ func (d *bincDecDriver) DecodeBool() (b bool) {
}
func (d *bincDecDriver) ReadMapStart() (length int) {
+ if !d.bdRead {
+ d.readNextBd()
+ }
if d.vd != bincVdMap {
d.d.errorf("Invalid d.vd for map. Expecting 0x%x. Got: 0x%x", bincVdMap, d.vd)
return
@@ -583,6 +598,9 @@ func (d *bincDecDriver) ReadMapStart() (length int) {
}
func (d *bincDecDriver) ReadArrayStart() (length int) {
+ if !d.bdRead {
+ d.readNextBd()
+ }
if d.vd != bincVdArray {
d.d.errorf("Invalid d.vd for array. Expecting 0x%x. Got: 0x%x", bincVdArray, d.vd)
return
@@ -632,12 +650,12 @@ func (d *bincDecDriver) decStringAndBytes(bs []byte, withString, zerocopy bool)
if d.br {
bs2 = d.r.readx(slen)
} else if len(bs) == 0 {
- bs2 = decByteSlice(d.r, slen, d.b[:])
+ bs2 = decByteSlice(d.r, slen, d.d.h.MaxInitLen, d.b[:])
} else {
- bs2 = decByteSlice(d.r, slen, bs)
+ bs2 = decByteSlice(d.r, slen, d.d.h.MaxInitLen, bs)
}
} else {
- bs2 = decByteSlice(d.r, slen, bs)
+ bs2 = decByteSlice(d.r, slen, d.d.h.MaxInitLen, bs)
}
if withString {
s = string(bs2)
@@ -689,7 +707,7 @@ func (d *bincDecDriver) decStringAndBytes(bs []byte, withString, zerocopy bool)
// since using symbols, do not store any part of
// the parameter bs in the map, as it might be a shared buffer.
// bs2 = decByteSlice(d.r, slen, bs)
- bs2 = decByteSlice(d.r, slen, nil)
+ bs2 = decByteSlice(d.r, slen, d.d.h.MaxInitLen, nil)
if withString {
s = string(bs2)
}
@@ -705,18 +723,19 @@ func (d *bincDecDriver) decStringAndBytes(bs []byte, withString, zerocopy bool)
}
func (d *bincDecDriver) DecodeString() (s string) {
- // DecodeBytes does not accomodate symbols, whose impl stores string version in map.
+ // DecodeBytes does not accommodate symbols, whose impl stores string version in map.
// Use decStringAndBytes directly.
// return string(d.DecodeBytes(d.b[:], true, true))
_, s = d.decStringAndBytes(d.b[:], true, true)
return
}
-func (d *bincDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) {
- if isstring {
- bsOut, _ = d.decStringAndBytes(bs, false, zerocopy)
- return
- }
+func (d *bincDecDriver) DecodeStringAsBytes() (s []byte) {
+ s, _ = d.decStringAndBytes(d.b[:], false, true)
+ return
+}
+
+func (d *bincDecDriver) DecodeBytes(bs []byte, zerocopy bool) (bsOut []byte) {
if !d.bdRead {
d.readNextBd()
}
@@ -740,7 +759,7 @@ func (d *bincDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut [
bs = d.b[:]
}
}
- return decByteSlice(d.r, clen, bs)
+ return decByteSlice(d.r, clen, d.d.h.MaxInitLen, bs)
}
func (d *bincDecDriver) DecodeExt(rv interface{}, xtag uint64, ext Ext) (realxtag uint64) {
@@ -773,7 +792,7 @@ func (d *bincDecDriver) decodeExtV(verifyTag bool, tag byte) (xtag byte, xbs []b
}
xbs = d.r.readx(l)
} else if d.vd == bincVdByteArray {
- xbs = d.DecodeBytes(nil, false, true)
+ xbs = d.DecodeBytes(nil, true)
} else {
d.d.errorf("Invalid d.vd for extensions (Expecting extensions or byte array). Got: 0x%x", d.vd)
return
@@ -787,7 +806,7 @@ func (d *bincDecDriver) DecodeNaked() {
d.readNextBd()
}
- n := &d.d.n
+ n := d.d.n
var decodeFurther bool
switch d.vd {
@@ -842,7 +861,7 @@ func (d *bincDecDriver) DecodeNaked() {
n.s = d.DecodeString()
case bincVdByteArray:
n.v = valueTypeBytes
- n.l = d.DecodeBytes(nil, false, false)
+ n.l = d.DecodeBytes(nil, false)
case bincVdTimestamp:
n.v = valueTypeTimestamp
tt, err := decodeTime(d.r.readx(int(d.vs)))
@@ -892,6 +911,7 @@ func (d *bincDecDriver) DecodeNaked() {
type BincHandle struct {
BasicHandle
binaryEncodingType
+ noElemSeparators
}
func (h *BincHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) {
@@ -903,7 +923,11 @@ func (h *BincHandle) newEncDriver(e *Encoder) encDriver {
}
func (h *BincHandle) newDecDriver(d *Decoder) decDriver {
- return &bincDecDriver{d: d, r: d.r, h: h, br: d.bytes}
+ return &bincDecDriver{d: d, h: h, r: d.r, br: d.bytes}
+}
+
+func (_ *BincHandle) IsBuiltinType(rt uintptr) bool {
+ return rt == timeTypId
}
func (e *bincEncDriver) reset() {
@@ -913,7 +937,7 @@ func (e *bincEncDriver) reset() {
}
func (d *bincDecDriver) reset() {
- d.r = d.d.r
+ d.r, d.br = d.d.r, d.d.bytes
d.s = nil
d.bd, d.bdRead, d.vd, d.vs = 0, false, 0, 0
}
diff --git a/codec/cbor.go b/codec/cbor.go
index cfd89b7..592cee8 100644
--- a/codec/cbor.go
+++ b/codec/cbor.go
@@ -61,7 +61,8 @@ const (
type cborEncDriver struct {
noBuiltInTypes
- encNoSeparator
+ encDriverNoopContainerWriter
+ // encNoSeparator
e *Encoder
w encWriter
h *CborHandle
@@ -134,21 +135,41 @@ func (e *cborEncDriver) EncodeExt(rv interface{}, xtag uint64, ext Ext, en *Enco
func (e *cborEncDriver) EncodeRawExt(re *RawExt, en *Encoder) {
e.encUint(uint64(re.Tag), cborBaseTag)
- if re.Data != nil {
+ if false && re.Data != nil {
en.encode(re.Data)
- } else if re.Value == nil {
+ } else if re.Value != nil {
+ en.encode(re.Value)
+ } else {
e.EncodeNil()
+ }
+}
+
+func (e *cborEncDriver) WriteArrayStart(length int) {
+ if e.h.IndefiniteLength {
+ e.w.writen1(cborBdIndefiniteArray)
} else {
- en.encode(re.Value)
+ e.encLen(cborBaseArray, length)
+ }
+}
+
+func (e *cborEncDriver) WriteMapStart(length int) {
+ if e.h.IndefiniteLength {
+ e.w.writen1(cborBdIndefiniteMap)
+ } else {
+ e.encLen(cborBaseMap, length)
}
}
-func (e *cborEncDriver) EncodeArrayStart(length int) {
- e.encLen(cborBaseArray, length)
+func (e *cborEncDriver) WriteMapEnd() {
+ if e.h.IndefiniteLength {
+ e.w.writen1(cborBdBreak)
+ }
}
-func (e *cborEncDriver) EncodeMapStart(length int) {
- e.encLen(cborBaseMap, length)
+func (e *cborEncDriver) WriteArrayEnd() {
+ if e.h.IndefiniteLength {
+ e.w.writen1(cborBdBreak)
+ }
}
func (e *cborEncDriver) EncodeString(c charEncoding, v string) {
@@ -180,7 +201,8 @@ type cborDecDriver struct {
bdRead bool
bd byte
noBuiltInTypes
- decNoSeparator
+ // decNoSeparator
+ decDriverNoopContainerReader
}
func (d *cborDecDriver) readNextBd() {
@@ -188,7 +210,17 @@ func (d *cborDecDriver) readNextBd() {
d.bdRead = true
}
+func (d *cborDecDriver) uncacheRead() {
+ if d.bdRead {
+ d.r.unreadn1()
+ d.bdRead = false
+ }
+}
+
func (d *cborDecDriver) ContainerType() (vt valueType) {
+ if !d.bdRead {
+ d.readNextBd()
+ }
if d.bd == cborBdNil {
return valueTypeNil
} else if d.bd == cborBdIndefiniteBytes || (d.bd >= cborBaseBytes && d.bd < cborBaseString) {
@@ -344,6 +376,9 @@ func (d *cborDecDriver) DecodeBool() (b bool) {
}
func (d *cborDecDriver) ReadMapStart() (length int) {
+ if !d.bdRead {
+ d.readNextBd()
+ }
d.bdRead = false
if d.bd == cborBdIndefiniteMap {
return -1
@@ -352,6 +387,9 @@ func (d *cborDecDriver) ReadMapStart() (length int) {
}
func (d *cborDecDriver) ReadArrayStart() (length int) {
+ if !d.bdRead {
+ d.readNextBd()
+ }
d.bdRead = false
if d.bd == cborBdIndefiniteArray {
return -1
@@ -391,7 +429,7 @@ func (d *cborDecDriver) decAppendIndefiniteBytes(bs []byte) []byte {
return bs
}
-func (d *cborDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) {
+func (d *cborDecDriver) DecodeBytes(bs []byte, zerocopy bool) (bsOut []byte) {
if !d.bdRead {
d.readNextBd()
}
@@ -414,11 +452,15 @@ func (d *cborDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut [
bs = d.b[:]
}
}
- return decByteSlice(d.r, clen, bs)
+ return decByteSlice(d.r, clen, d.d.h.MaxInitLen, bs)
}
func (d *cborDecDriver) DecodeString() (s string) {
- return string(d.DecodeBytes(d.b[:], true, true))
+ return string(d.DecodeBytes(d.b[:], true))
+}
+
+func (d *cborDecDriver) DecodeStringAsBytes() (s []byte) {
+ return d.DecodeBytes(d.b[:], true)
}
func (d *cborDecDriver) DecodeExt(rv interface{}, xtag uint64, ext Ext) (realxtag uint64) {
@@ -449,7 +491,7 @@ func (d *cborDecDriver) DecodeNaked() {
d.readNextBd()
}
- n := &d.d.n
+ n := d.d.n
var decodeFurther bool
switch d.bd {
@@ -469,7 +511,7 @@ func (d *cborDecDriver) DecodeNaked() {
n.f = d.DecodeFloat(false)
case cborBdIndefiniteBytes:
n.v = valueTypeBytes
- n.l = d.DecodeBytes(nil, false, false)
+ n.l = d.DecodeBytes(nil, false)
case cborBdIndefiniteString:
n.v = valueTypeString
n.s = d.DecodeString()
@@ -494,7 +536,7 @@ func (d *cborDecDriver) DecodeNaked() {
n.i = d.DecodeInt(64)
case d.bd >= cborBaseBytes && d.bd < cborBaseString:
n.v = valueTypeBytes
- n.l = d.DecodeBytes(nil, false, false)
+ n.l = d.DecodeBytes(nil, false)
case d.bd >= cborBaseString && d.bd < cborBaseArray:
n.v = valueTypeString
n.s = d.DecodeString()
@@ -508,7 +550,7 @@ func (d *cborDecDriver) DecodeNaked() {
n.v = valueTypeExt
n.u = d.decUint()
n.l = nil
- d.bdRead = false
+ // d.bdRead = false
// d.d.decode(&re.Value) // handled by decode itself.
// decodeFurther = true
default:
@@ -557,7 +599,11 @@ func (d *cborDecDriver) DecodeNaked() {
//
type CborHandle struct {
binaryEncodingType
+ noElemSeparators
BasicHandle
+
+ // IndefiniteLength=true, means that we encode using indefinitelength
+ IndefiniteLength bool
}
func (h *CborHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) {
@@ -569,7 +615,7 @@ func (h *CborHandle) newEncDriver(e *Encoder) encDriver {
}
func (h *CborHandle) newDecDriver(d *Decoder) decDriver {
- return &cborDecDriver{d: d, r: d.r, h: h, br: d.bytes}
+ return &cborDecDriver{d: d, h: h, r: d.r, br: d.bytes}
}
func (e *cborEncDriver) reset() {
@@ -577,7 +623,7 @@ func (e *cborEncDriver) reset() {
}
func (d *cborDecDriver) reset() {
- d.r = d.d.r
+ d.r, d.br = d.d.r, d.d.bytes
d.bd, d.bdRead = 0, false
}
diff --git a/codec/codec_test.go b/codec/codec_test.go
index 8aa4ed5..947911b 100644
--- a/codec/codec_test.go
+++ b/codec/codec_test.go
@@ -18,13 +18,10 @@ package codec
//
// The following manual tests must be done:
// - TestCodecUnderlyingType
-// - Set fastpathEnabled to false and run tests (to ensure that regular reflection works).
-// We don't want to use a variable there so that code is ellided.
import (
"bytes"
"encoding/gob"
- "flag"
"fmt"
"io/ioutil"
"math"
@@ -44,10 +41,19 @@ import (
)
func init() {
- testInitFlags()
testPreInitFns = append(testPreInitFns, testInit)
+ // fmt.Printf("sizeof: Decoder: %v, Encoder: %v, decNaked: %v\n",
+ // reflect.TypeOf((*Decoder)(nil)).Elem().Size(),
+ // reflect.TypeOf((*Encoder)(nil)).Elem().Size(),
+ // reflect.TypeOf((*decNaked)(nil)).Elem().Size(),
+ // )
}
+// make this a mapbyslice
+type testMbsT []interface{}
+
+func (_ testMbsT) MapBySlice() {}
+
type testVerifyArg int
const (
@@ -58,22 +64,18 @@ const (
testVerifyForPython
)
-const testSkipRPCTests = false
+// const testSkipRPCTests = false
var (
- testVerbose bool
- testInitDebug bool
- testUseIoEncDec bool
- testStructToArray bool
- testCanonical bool
- testUseReset bool
- testWriteNoSymbols bool
- testSkipIntf bool
- testInternStr bool
- testUseMust bool
- testCheckCircRef bool
- testJsonIndent int
+ testTableNumPrimitives int
+ testTableIdxTime int
+ testTableNumMaps int
+ // set this when running using bufio, etc
+ testSkipRPCTests = false
+)
+
+var (
skipVerifyVal interface{} = &(struct{}{})
testMapStrIntfTyp = reflect.TypeOf(map[string]interface{}(nil))
@@ -96,22 +98,6 @@ var (
testRpcInt = new(TestRpcInt)
)
-func testInitFlags() {
- // delete(testDecOpts.ExtFuncs, timeTyp)
- flag.BoolVar(&testVerbose, "tv", false, "Test Verbose")
- flag.BoolVar(&testInitDebug, "tg", false, "Test Init Debug")
- flag.BoolVar(&testUseIoEncDec, "ti", false, "Use IO Reader/Writer for Marshal/Unmarshal")
- flag.BoolVar(&testStructToArray, "ts", false, "Set StructToArray option")
- flag.BoolVar(&testWriteNoSymbols, "tn", false, "Set NoSymbols option")
- flag.BoolVar(&testCanonical, "tc", false, "Set Canonical option")
- flag.BoolVar(&testInternStr, "te", false, "Set InternStr option")
- flag.BoolVar(&testSkipIntf, "tf", false, "Skip Interfaces")
- flag.BoolVar(&testUseReset, "tr", false, "Use Reset")
- flag.IntVar(&testJsonIndent, "td", 0, "Use JSON Indent")
- flag.BoolVar(&testUseMust, "tm", true, "Use Must(En|De)code")
- flag.BoolVar(&testCheckCircRef, "tl", false, "Use Check Circular Ref")
-}
-
func testByteBuf(in []byte) *bytes.Buffer {
return bytes.NewBuffer(in)
}
@@ -156,6 +142,14 @@ func (x *TestABC2) UnmarshalText(data []byte) (err error) {
// _, err = fmt.Sscanf(string(data), "%s %s %s", &x.A, &x.B, &x.C)
}
+type TestSimplish struct {
+ Ii int
+ Ss string
+ Ar [2]*TestSimplish
+ Sl []*TestSimplish
+ Mm map[string]*TestSimplish
+}
+
type TestRpcABC struct {
A, B, C string
}
@@ -176,6 +170,11 @@ func (r *TestRpcInt) Echo123(args []string, res *string) error {
return nil
}
+type TestRawValue struct {
+ R Raw
+ I int
+}
+
type testUnixNanoTimeExt struct {
// keep timestamp here, so that do not incur interface-conversion costs
ts int64
@@ -195,7 +194,6 @@ func (x *testUnixNanoTimeExt) ConvertExt(v interface{}) interface{} {
return &x.ts
}
func (x *testUnixNanoTimeExt) UpdateExt(dest interface{}, v interface{}) {
- // fmt.Printf("testUnixNanoTimeExt.UpdateExt: v: %v\n", v)
tt := dest.(*time.Time)
switch v2 := v.(type) {
case int64:
@@ -211,7 +209,6 @@ func (x *testUnixNanoTimeExt) UpdateExt(dest interface{}, v interface{}) {
default:
panic(fmt.Sprintf("unsupported format for time conversion: expecting int64/uint64; got %T", v))
}
- // fmt.Printf("testUnixNanoTimeExt.UpdateExt: v: %v, tt: %#v\n", v, tt)
}
func testVerifyVal(v interface{}, arg testVerifyArg) (v2 interface{}) {
@@ -261,6 +258,12 @@ func testVerifyVal(v interface{}, arg testVerifyArg) (v2 interface{}) {
m2[j] = testVerifyVal(vj, arg)
}
v2 = m2
+ case testMbsT:
+ m2 := make([]interface{}, len(iv))
+ for j, vj := range iv {
+ m2[j] = testVerifyVal(vj, arg)
+ }
+ v2 = testMbsT(m2)
case map[string]bool:
switch arg {
case testVerifyMapTypeSame:
@@ -327,27 +330,27 @@ func testVerifyVal(v interface{}, arg testVerifyArg) (v2 interface{}) {
}
func testInit() {
- gob.Register(new(TestStruc))
+ gob.Register(new(TestStrucFlex))
if testInitDebug {
- ts0 := newTestStruc(2, false, !testSkipIntf, false)
- fmt.Printf("====> depth: %v, ts: %#v\n", 2, ts0)
+ ts0 := newTestStrucFlex(2, testNumRepeatString, false, !testSkipIntf, false)
+ logT(nil, "====> depth: %v, ts: %#v\n", 2, ts0)
}
for _, v := range testHandles {
bh := v.getBasicHandle()
+ // pre-fill them first
+ bh.EncodeOptions = testEncodeOptions
+ bh.DecodeOptions = testDecodeOptions
+ // bh.InterfaceReset = true // TODO: remove
+ // bh.PreferArrayOverSlice = true // TODO: remove
+ // modify from flag'ish things
bh.InternString = testInternStr
bh.Canonical = testCanonical
bh.CheckCircularRef = testCheckCircRef
bh.StructToArray = testStructToArray
- // mostly doing this for binc
- if testWriteNoSymbols {
- bh.AsSymbols = AsSymbolNone
- } else {
- bh.AsSymbols = AsSymbolAll
- }
+ bh.MaxInitLen = testMaxInitLen
}
- testJsonH.Indent = int8(testJsonIndent)
testMsgpackH.RawToString = true
// testMsgpackH.AddExt(byteSliceTyp, 0, testMsgpackH.BinaryEncodeExt, testMsgpackH.BinaryDecodeExt)
@@ -357,11 +360,25 @@ func testInit() {
// use different flavors of XXXExt calls, including deprecated ones.
// NOTE:
// DO NOT set extensions for JsonH, so we can test json(M|Unm)arshal support.
+ var (
+ timeExtEncFn = func(rv reflect.Value) (bs []byte, err error) {
+ defer panicToErr(&err)
+ bs = timeExt{}.WriteExt(rv.Interface())
+ return
+ }
+ timeExtDecFn = func(rv reflect.Value, bs []byte) (err error) {
+ defer panicToErr(&err)
+ timeExt{}.ReadExt(rv.Interface(), bs)
+ return
+ }
+ )
testSimpleH.AddExt(timeTyp, 1, timeExtEncFn, timeExtDecFn)
+
testMsgpackH.SetBytesExt(timeTyp, 1, timeExt{})
testCborH.SetInterfaceExt(timeTyp, 1, &testUnixNanoTimeExt{})
// testJsonH.SetInterfaceExt(timeTyp, 1, &testUnixNanoTimeExt{})
+ // primitives MUST be an even number, so it can be used as a mapBySlice also.
primitives := []interface{}{
int8(-8),
int16(-1616),
@@ -375,19 +392,23 @@ func testInit() {
float32(-3232.0),
float64(-6464646464.0),
float32(3232.0),
+ float64(6464.0),
float64(6464646464.0),
false,
true,
+ "null",
nil,
- "someday",
- "",
- "bytestring",
+ "some&day>some<day",
timeToCompare1,
+ "",
timeToCompare2,
+ "bytestring",
timeToCompare3,
+ "none",
timeToCompare4,
}
- mapsAndStrucs := []interface{}{
+
+ maps := []interface{}{
map[string]bool{
"true": true,
"false": false,
@@ -411,9 +432,22 @@ func testInit() {
},
[]interface{}{true, false},
},
- "int32": int32(32323232),
- "bool": true,
- "LONG STRING": "123456789012345678901234567890123456789012345678901234567890",
+ "int32": int32(32323232),
+ "bool": true,
+ "LONG STRING": `
+1234567890 1234567890
+1234567890 1234567890
+1234567890 1234567890
+ABCDEDFGHIJKLMNOPQRSTUVWXYZ
+abcdedfghijklmnopqrstuvwxyz
+ABCDEDFGHIJKLMNOPQRSTUVWXYZ
+abcdedfghijklmnopqrstuvwxyz
+"ABCDEDFGHIJKLMNOPQRSTUVWXYZ"
+' a tab '
+\a\b\c\d\e
+\b\f\n\r\t all literally
+ugorji
+`,
"SHORT STRING": "1234567890",
},
map[interface{}]interface{}{
@@ -421,22 +455,27 @@ func testInit() {
uint8(138): false,
"false": uint8(200),
},
- newTestStruc(0, false, !testSkipIntf, false),
}
+ testTableNumPrimitives = len(primitives)
+ testTableIdxTime = testTableNumPrimitives - 8
+ testTableNumMaps = len(maps)
+
table = []interface{}{}
- table = append(table, primitives...) //0-19 are primitives
- table = append(table, primitives) //20 is a list of primitives
- table = append(table, mapsAndStrucs...) //21-24 are maps. 25 is a *struct
+ table = append(table, primitives...)
+ table = append(table, primitives)
+ table = append(table, testMbsT(primitives))
+ table = append(table, maps...)
+ table = append(table, newTestStrucFlex(0, testNumRepeatString, false, !testSkipIntf, false))
tableVerify = make([]interface{}, len(table))
tableTestNilVerify = make([]interface{}, len(table))
tablePythonVerify = make([]interface{}, len(table))
- lp := len(primitives)
+ lp := testTableNumPrimitives + 4
av := tableVerify
for i, v := range table {
- if i == lp+3 {
+ if i == lp {
av[i] = skipVerifyVal
continue
}
@@ -444,6 +483,8 @@ func testInit() {
switch v.(type) {
case []interface{}:
av[i] = testVerifyVal(v, testVerifyMapTypeSame)
+ case testMbsT:
+ av[i] = testVerifyVal(v, testVerifyMapTypeSame)
case map[string]interface{}:
av[i] = testVerifyVal(v, testVerifyMapTypeSame)
case map[interface{}]interface{}:
@@ -455,7 +496,7 @@ func testInit() {
av = tableTestNilVerify
for i, v := range table {
- if i > lp+3 {
+ if i > lp {
av[i] = skipVerifyVal
continue
}
@@ -464,14 +505,15 @@ func testInit() {
av = tablePythonVerify
for i, v := range table {
- if i > lp+3 {
+ if i == testTableNumPrimitives+1 || i > lp { // testTableNumPrimitives+1 is the mapBySlice
av[i] = skipVerifyVal
continue
}
av[i] = testVerifyVal(v, testVerifyForPython)
}
- tablePythonVerify = tablePythonVerify[:24]
+ // only do the python verify up to the maps, skipping the last 2 maps.
+ tablePythonVerify = tablePythonVerify[:testTableNumPrimitives+2+testTableNumMaps-2]
}
func testUnmarshal(v interface{}, data []byte, h Handle) (err error) {
@@ -485,7 +527,7 @@ func testMarshal(v interface{}, h Handle) (bs []byte, err error) {
func testMarshalErr(v interface{}, h Handle, t *testing.T, name string) (bs []byte, err error) {
if bs, err = testMarshal(v, h); err != nil {
logT(t, "Error encoding %s: %v, Err: %v", name, v, err)
- t.FailNow()
+ failT(t)
}
return
}
@@ -493,7 +535,17 @@ func testMarshalErr(v interface{}, h Handle, t *testing.T, name string) (bs []by
func testUnmarshalErr(v interface{}, data []byte, h Handle, t *testing.T, name string) (err error) {
if err = testUnmarshal(v, data, h); err != nil {
logT(t, "Error Decoding into %s: %v, Err: %v", name, v, err)
- t.FailNow()
+ failT(t)
+ }
+ return
+}
+
+func testDeepEqualErr(v1, v2 interface{}, t *testing.T, name string) (err error) {
+ if err = deepEqual(v1, v2); err == nil {
+ logT(t, "%s: values equal", name)
+ } else {
+ logT(t, "%s: values not equal: %v. 1: %v, 2: %v", name, err, v1, v2)
+ failT(t)
}
return
}
@@ -511,10 +563,14 @@ func doTestCodecTableOne(t *testing.T, testNil bool, h Handle,
if err != nil {
continue
}
+ var b1 = b0
+ if len(b1) > 256 {
+ b1 = b1[:256]
+ }
if h.isBinary() {
- logT(t, " Encoded bytes: len: %v, %v\n", len(b0), b0)
+ logT(t, " Encoded bytes: len: %v, %v\n", len(b0), b1)
} else {
- logT(t, " Encoded string: len: %v, %v\n", len(string(b0)), string(b0))
+ logT(t, " Encoded string: len: %v, %v\n", len(b0), string(b1))
// println("########### encoded string: " + string(b0))
}
var v1 interface{}
@@ -524,10 +580,15 @@ func doTestCodecTableOne(t *testing.T, testNil bool, h Handle,
} else {
if v0 != nil {
v0rt := reflect.TypeOf(v0) // ptr
- rv1 := reflect.New(v0rt)
- err = testUnmarshal(rv1.Interface(), b0, h)
- v1 = rv1.Elem().Interface()
- // v1 = reflect.Indirect(reflect.ValueOf(v1)).Interface()
+ if v0rt.Kind() == reflect.Ptr {
+ err = testUnmarshal(v0, b0, h)
+ v1 = v0
+ } else {
+ rv1 := reflect.New(v0rt)
+ err = testUnmarshal(rv1.Interface(), b0, h)
+ v1 = rv1.Elem().Interface()
+ // v1 = reflect.Indirect(reflect.ValueOf(v1)).Interface()
+ }
}
}
@@ -553,7 +614,7 @@ func doTestCodecTableOne(t *testing.T, testNil bool, h Handle,
} else {
// logT(t, "-------- Before and After marshal do not match: Error: %v"+
// " ====> GOLDEN: (%T) %#v, DECODED: (%T) %#v\n", err, v0check, v0check, v1, v1)
- logT(t, "-------- Before and After marshal do not match: Error: %v", err)
+ logT(t, "-------- FAIL: Before and After marshal do not match: Error: %v", err)
logT(t, " ....... GOLDEN: (%T) %#v", v0check, v0check)
logT(t, " ....... DECODED: (%T) %#v", v1, v1)
failT(t)
@@ -566,20 +627,22 @@ func testCodecTableOne(t *testing.T, h Handle) {
// func TestMsgpackAllExperimental(t *testing.T) {
// dopts := testDecOpts(nil, nil, false, true, true),
- idxTime, numPrim, numMap := 19, 23, 4
+ numPrim, numMap, idxTime, idxMap := testTableNumPrimitives, testTableNumMaps, testTableIdxTime, testTableNumPrimitives+2
+
//println("#################")
switch v := h.(type) {
case *MsgpackHandle:
var oldWriteExt, oldRawToString bool
oldWriteExt, v.WriteExt = v.WriteExt, true
oldRawToString, v.RawToString = v.RawToString, true
+ // defer func() { v.WriteExt, v.RawToString = oldWriteExt, oldRawToString }()
doTestCodecTableOne(t, false, h, table, tableVerify)
v.WriteExt, v.RawToString = oldWriteExt, oldRawToString
case *JsonHandle:
//skip []interface{} containing time.Time, as it encodes as a number, but cannot decode back to time.Time.
//As there is no real support for extension tags in json, this must be skipped.
doTestCodecTableOne(t, false, h, table[:numPrim], tableVerify[:numPrim])
- doTestCodecTableOne(t, false, h, table[numPrim+1:], tableVerify[numPrim+1:])
+ doTestCodecTableOne(t, false, h, table[idxMap:], tableVerify[idxMap:])
default:
doTestCodecTableOne(t, false, h, table, tableVerify)
}
@@ -593,17 +656,16 @@ func testCodecTableOne(t *testing.T, h Handle) {
v := h.getBasicHandle()
oldMapType, v.MapType = v.MapType, testMapStrIntfTyp
-
+ // defer func() { v.MapType = oldMapType }()
//skip time.Time, []interface{} containing time.Time, last map, and newStruc
doTestCodecTableOne(t, true, h, table[:idxTime], tableTestNilVerify[:idxTime])
- doTestCodecTableOne(t, true, h, table[numPrim+1:numPrim+numMap], tableTestNilVerify[numPrim+1:numPrim+numMap])
-
+ doTestCodecTableOne(t, true, h, table[idxMap:idxMap+numMap-1], tableTestNilVerify[idxMap:idxMap+numMap-1])
v.MapType = oldMapType
-
// func TestMsgpackNilIntf(t *testing.T) {
- //do newTestStruc and last element of map
- doTestCodecTableOne(t, true, h, table[numPrim+numMap:], tableTestNilVerify[numPrim+numMap:])
+ //do last map and newStruc
+ idx2 := idxMap + numMap - 1
+ doTestCodecTableOne(t, true, h, table[idx2:], tableTestNilVerify[idx2:])
//TODO? What is this one?
//doTestCodecTableOne(t, true, h, table[17:18], tableTestNilVerify[17:18])
}
@@ -615,32 +677,36 @@ func testCodecMiscOne(t *testing.T, h Handle) {
// var i *int32
// if err = testUnmarshal(b, i, nil); err == nil {
// logT(t, "------- Expecting error because we cannot unmarshal to int32 nil ptr")
- // t.FailNow()
+ // failT(t)
// }
var i2 int32 = 0
err = testUnmarshalErr(&i2, b, h, t, "int32-ptr")
if i2 != int32(32) {
logT(t, "------- didn't unmarshal to 32: Received: %d", i2)
- t.FailNow()
+ failT(t)
}
// func TestMsgpackDecodePtr(t *testing.T) {
- ts := newTestStruc(0, false, !testSkipIntf, false)
+ ts := newTestStrucFlex(testDepth, testNumRepeatString, false, !testSkipIntf, false)
b, err = testMarshalErr(ts, h, t, "pointer-to-struct")
if len(b) < 40 {
logT(t, "------- Size must be > 40. Size: %d", len(b))
- t.FailNow()
+ failT(t)
+ }
+ var b1 = b
+ if len(b1) > 256 {
+ b1 = b1[:256]
}
if h.isBinary() {
- logT(t, "------- b: %v", b)
+ logT(t, "------- b: size: %v, value: %v", len(b), b1)
} else {
- logT(t, "------- b: %s", b)
+ logT(t, "------- b: size: %v, value: %s", len(b), b1)
}
- ts2 := new(TestStruc)
+ ts2 := new(TestStrucFlex)
err = testUnmarshalErr(ts2, b, h, t, "pointer-to-struct")
if ts2.I64 != math.MaxInt64*2/3 {
logT(t, "------- Unmarshal wrong. Expect I64 = 64. Got: %v", ts2.I64)
- t.FailNow()
+ failT(t)
}
// func TestMsgpackIntfDecode(t *testing.T) {
@@ -653,9 +719,10 @@ func testCodecMiscOne(t *testing.T, h Handle) {
err = testUnmarshalErr(&p2, bs, h, t, "&p2")
if m2["A"] != 2 || m2["B"] != 3 {
- logT(t, "m2 not as expected: expecting: %v, got: %v", m, m2)
- t.FailNow()
+ logT(t, "FAIL: m2 not as expected: expecting: %v, got: %v", m, m2)
+ failT(t)
}
+
// log("m: %v, m2: %v, p: %v, p2: %v", m, m2, p, p2)
checkEqualT(t, p, p2, "p=p2")
checkEqualT(t, m, m2, "m=m2")
@@ -663,13 +730,13 @@ func testCodecMiscOne(t *testing.T, h Handle) {
logT(t, "p and p2 match")
} else {
logT(t, "Not Equal: %v. p: %v, p2: %v", err, p, p2)
- t.FailNow()
+ failT(t)
}
if err = deepEqual(m, m2); err == nil {
logT(t, "m and m2 match")
} else {
logT(t, "Not Equal: %v. m: %v, m2: %v", err, m, m2)
- t.FailNow()
+ failT(t)
}
// func TestMsgpackDecodeStructSubset(t *testing.T) {
@@ -699,7 +766,7 @@ func testCodecMiscOne(t *testing.T, h Handle) {
bs, err = testMarshalErr(tarr1, h, t, "tarr1")
if err != nil {
logT(t, "Error marshalling: %v", err)
- t.FailNow()
+ failT(t)
}
if _, ok := h.(*JsonHandle); ok {
logT(t, "Marshal as: %s", bs)
@@ -707,7 +774,6 @@ func testCodecMiscOne(t *testing.T, h Handle) {
var tarr2 tarr
testUnmarshalErr(&tarr2, bs, h, t, "tarr2")
checkEqualT(t, tarr0, tarr2, "tarr0=tarr2")
- // fmt.Printf(">>>> err: %v. tarr1: %v, tarr2: %v\n", err, tarr0, tarr2)
}
// test byte array, even if empty (msgpack only)
@@ -734,7 +800,6 @@ func testCodecEmbeddedPointer(t *testing.T, h Handle) {
var z Z = 4
x1 := &B{&z, &A{5}, 6}
bs, err := testMarshalErr(x1, h, t, "x1")
- // fmt.Printf("buf: len(%v): %x\n", buf.Len(), buf.Bytes())
var x2 = new(B)
err = testUnmarshalErr(x2, bs, h, t, "x2")
err = checkEqualT(t, x1, x2, "x1=x2")
@@ -764,40 +829,115 @@ func testCodecUnderlyingType(t *testing.T, h Handle) {
}
func testCodecChan(t *testing.T, h Handle) {
+ testOnce.Do(testInitAll)
// - send a slice []*int64 (sl1) into an chan (ch1) with cap > len(s1)
// - encode ch1 as a stream array
// - decode a chan (ch2), with cap > len(s1) from the stream array
// - receive from ch2 into slice sl2
// - compare sl1 and sl2
// - do this for codecs: json, cbor (covers all types)
- sl1 := make([]*int64, 4)
- for i := range sl1 {
- var j int64 = int64(i)
- sl1[i] = &j
+
+ if true {
+ sl1 := make([]*int64, 4)
+ for i := range sl1 {
+ var j int64 = int64(i)
+ sl1[i] = &j
+ }
+ ch1 := make(chan *int64, 4)
+ for _, j := range sl1 {
+ ch1 <- j
+ }
+ var bs []byte
+ NewEncoderBytes(&bs, h).MustEncode(ch1)
+ ch2 := make(chan *int64, 8)
+ NewDecoderBytes(bs, h).MustDecode(&ch2)
+ close(ch2)
+ var sl2 []*int64
+ for j := range ch2 {
+ sl2 = append(sl2, j)
+ }
+ if err := deepEqual(sl1, sl2); err != nil {
+ logT(t, "FAIL: Not Match: %v; len: %v, %v", err, len(sl1), len(sl2))
+ failT(t)
+ }
+ }
+
+ if true {
+ type testBytesT []byte
+ sl1 := make([]testBytesT, 4)
+ for i := range sl1 {
+ var j = []byte(strings.Repeat(strconv.FormatInt(int64(i), 10), i))
+ sl1[i] = j
+ }
+ ch1 := make(chan testBytesT, 4)
+ for _, j := range sl1 {
+ ch1 <- j
+ }
+ var bs []byte
+ NewEncoderBytes(&bs, h).MustEncode(ch1)
+ ch2 := make(chan testBytesT, 8)
+ NewDecoderBytes(bs, h).MustDecode(&ch2)
+ close(ch2)
+ var sl2 []testBytesT
+ for j := range ch2 {
+ sl2 = append(sl2, j)
+ }
+ if err := deepEqual(sl1, sl2); err != nil {
+ logT(t, "FAIL: Not Match: %v; len: %v, %v", err, len(sl1), len(sl2))
+ failT(t)
+ }
}
- ch1 := make(chan *int64, 4)
- for _, j := range sl1 {
- ch1 <- j
+ if true {
+ type testBytesT byte
+ sl1 := make([]testBytesT, 4)
+ for i := range sl1 {
+ var j = strconv.FormatInt(int64(i), 10)[0]
+ sl1[i] = testBytesT(j)
+ }
+ ch1 := make(chan testBytesT, 4)
+ for _, j := range sl1 {
+ ch1 <- j
+ }
+ var bs []byte
+ NewEncoderBytes(&bs, h).MustEncode(ch1)
+ ch2 := make(chan testBytesT, 8)
+ NewDecoderBytes(bs, h).MustDecode(&ch2)
+ close(ch2)
+ var sl2 []testBytesT
+ for j := range ch2 {
+ sl2 = append(sl2, j)
+ }
+ if err := deepEqual(sl1, sl2); err != nil {
+ logT(t, "FAIL: Not Match: %v; len: %v, %v", err, len(sl1), len(sl2))
+ failT(t)
+ }
}
- var bs []byte
- NewEncoderBytes(&bs, h).MustEncode(ch1)
- // if !h.isBinary() {
- // fmt.Printf("before: len(ch1): %v, bs: %s\n", len(ch1), bs)
- // }
- // var ch2 chan *int64 // this will block if json, etc.
- ch2 := make(chan *int64, 8)
- NewDecoderBytes(bs, h).MustDecode(&ch2)
- // logT(t, "Len(ch2): %v", len(ch2))
- // fmt.Printf("after: len(ch2): %v, ch2: %v\n", len(ch2), ch2)
- close(ch2)
- var sl2 []*int64
- for j := range ch2 {
- sl2 = append(sl2, j)
- }
- if err := deepEqual(sl1, sl2); err != nil {
- logT(t, "Not Match: %v; len: %v, %v", err, len(sl1), len(sl2))
- failT(t)
+
+ if true {
+ sl1 := make([]byte, 4)
+ for i := range sl1 {
+ var j = strconv.FormatInt(int64(i), 10)[0]
+ sl1[i] = byte(j)
+ }
+ ch1 := make(chan byte, 4)
+ for _, j := range sl1 {
+ ch1 <- j
+ }
+ var bs []byte
+ NewEncoderBytes(&bs, h).MustEncode(ch1)
+ ch2 := make(chan byte, 8)
+ NewDecoderBytes(bs, h).MustDecode(&ch2)
+ close(ch2)
+ var sl2 []byte
+ for j := range ch2 {
+ sl2 = append(sl2, j)
+ }
+ if err := deepEqual(sl1, sl2); err != nil {
+ logT(t, "FAIL: Not Match: %v; len: %v, %v", err, len(sl1), len(sl2))
+ failT(t)
+ }
}
+
}
func testCodecRpcOne(t *testing.T, rr Rpc, h Handle, doRequest bool, exitSleepMs time.Duration,
@@ -809,7 +949,12 @@ func testCodecRpcOne(t *testing.T, rr Rpc, h Handle, doRequest bool, exitSleepMs
// rpc needs EOF, which is sent via a panic, and so must be recovered.
if !recoverPanicToErr {
logT(t, "EXPECTED. set recoverPanicToErr=true, since rpc needs EOF")
- t.FailNow()
+ failT(t)
+ }
+
+ if jsonH, ok := h.(*JsonHandle); ok && !jsonH.TermWhitespace {
+ jsonH.TermWhitespace = true
+ defer func() { jsonH.TermWhitespace = false }()
}
srv := rpc.NewServer()
srv.Register(testRpcInt)
@@ -866,7 +1011,6 @@ func testCodecRpcOne(t *testing.T, rr Rpc, h Handle, doRequest bool, exitSleepMs
connFn := func() (bs net.Conn) {
// log("calling f1")
bs, err2 := net.Dial(ln.Addr().Network(), ln.Addr().String())
- //fmt.Printf("f1. bs: %v, err2: %v\n", bs, err2)
checkErrT(t, err2)
return
}
@@ -902,10 +1046,12 @@ func testCodecRpcOne(t *testing.T, rr Rpc, h Handle, doRequest bool, exitSleepMs
}
func doTestMapEncodeForCanonical(t *testing.T, name string, h Handle) {
- v1 := map[string]interface{}{
- "a": 1,
- "b": "hello",
- "c": map[string]interface{}{
+ testOnce.Do(testInitAll)
+ // println("doTestMapEncodeForCanonical")
+ v1 := map[stringUint64T]interface{}{
+ {"a", 1}: 1,
+ {"b", 2}: "hello",
+ {"c", 3}: map[string]interface{}{
"c/a": 1,
"c/b": "world",
"c/c": []int{1, 2, 3, 4},
@@ -933,7 +1079,7 @@ func doTestMapEncodeForCanonical(t *testing.T, name string, h Handle) {
},
},
}
- var v2 map[string]interface{}
+ var v2 map[stringUint64T]interface{}
var b1, b2 []byte
// encode v1 into b1, decode b1 into v2, encode v2 into b2, compare b1 and b2
@@ -952,11 +1098,12 @@ func doTestMapEncodeForCanonical(t *testing.T, name string, h Handle) {
e2.MustEncode(v2)
if !bytes.Equal(b1, b2) {
logT(t, "Unequal bytes: %v VS %v", b1, b2)
- t.FailNow()
+ failT(t)
}
}
func doTestStdEncIntf(t *testing.T, name string, h Handle) {
+ testOnce.Do(testInitAll)
args := [][2]interface{}{
{&TestABC{"A", "BB", "CCC"}, new(TestABC)},
{&TestABC2{"AAA", "BB", "C"}, new(TestABC2)},
@@ -970,13 +1117,14 @@ func doTestStdEncIntf(t *testing.T, name string, h Handle) {
if err := deepEqual(a[0], a[1]); err == nil {
logT(t, "++++ Objects match")
} else {
- logT(t, "---- Objects do not match: y1: %v, err: %v", a[1], err)
+ logT(t, "---- FAIL: Objects do not match: y1: %v, err: %v", a[1], err)
failT(t)
}
}
}
func doTestEncCircularRef(t *testing.T, name string, h Handle) {
+ testOnce.Do(testInitAll)
type T1 struct {
S string
B bool
@@ -1006,13 +1154,13 @@ func doTestEncCircularRef(t *testing.T, name string, h Handle) {
err = NewEncoderBytes(&bs, h).Encode(&t3)
if err == nil {
logT(t, "expecting error due to circular reference. found none")
- t.FailNow()
+ failT(t)
}
if x := err.Error(); strings.Contains(x, "circular") || strings.Contains(x, "cyclic") {
logT(t, "error detected as expected: %v", x)
} else {
- logT(t, "error detected was not as expected: %v", x)
- t.FailNow()
+ logT(t, "FAIL: error detected was not as expected: %v", x)
+ failT(t)
}
}
@@ -1033,6 +1181,7 @@ type (
)
func doTestAnonCycle(t *testing.T, name string, h Handle) {
+ testOnce.Do(testInitAll)
var x TestAnonCycleT1
x.S = "hello"
x.TestAnonCycleT2.S2 = "hello.2"
@@ -1040,21 +1189,129 @@ func doTestAnonCycle(t *testing.T, name string, h Handle) {
// just check that you can get typeInfo for T1
rt := reflect.TypeOf((*TestAnonCycleT1)(nil)).Elem()
- rtid := reflect.ValueOf(rt).Pointer()
+ rtid := rt2id(rt)
pti := h.getBasicHandle().getTypeInfo(rtid, rt)
logT(t, "pti: %v", pti)
}
+func doTestJsonLargeInteger(t *testing.T, v interface{}, ias uint8) {
+ testOnce.Do(testInitAll)
+ logT(t, "Running doTestJsonLargeInteger: v: %#v, ias: %c", v, ias)
+ oldIAS := testJsonH.IntegerAsString
+ defer func() { testJsonH.IntegerAsString = oldIAS }()
+ testJsonH.IntegerAsString = ias
+
+ var vu uint
+ var vi int
+ var vb bool
+ var b []byte
+ e := NewEncoderBytes(&b, testJsonH)
+ e.MustEncode(v)
+ e.MustEncode(true)
+ d := NewDecoderBytes(b, testJsonH)
+ // below, we validate that the json string or number was encoded,
+ // then decode, and validate that the correct value was decoded.
+ fnStrChk := func() {
+ // check that output started with ", and ended with "true
+ if !(b[0] == '"' && string(b[len(b)-5:]) == `"true`) {
+ logT(t, "Expecting a JSON string, got: %s", b)
+ failT(t)
+ }
+ }
+
+ switch ias {
+ case 'L':
+ switch v2 := v.(type) {
+ case int:
+ v2n := int64(v2) // done to work with 32-bit OS
+ if v2n > 1<<53 || (v2n < 0 && -v2n > 1<<53) {
+ fnStrChk()
+ }
+ case uint:
+ v2n := uint64(v2) // done to work with 32-bit OS
+ if v2n > 1<<53 {
+ fnStrChk()
+ }
+ }
+ case 'A':
+ fnStrChk()
+ default:
+ // check that output doesn't contain " at all
+ for _, i := range b {
+ if i == '"' {
+ logT(t, "Expecting a JSON Number without quotation: got: %s", b)
+ failT(t)
+ }
+ }
+ }
+ switch v2 := v.(type) {
+ case int:
+ d.MustDecode(&vi)
+ d.MustDecode(&vb)
+ // check that vb = true, and vi == v2
+ if !(vb && vi == v2) {
+ logT(t, "Expecting equal values from %s: got golden: %v, decoded: %v", b, v2, vi)
+ failT(t)
+ }
+ case uint:
+ d.MustDecode(&vu)
+ d.MustDecode(&vb)
+ // check that vb = true, and vi == v2
+ if !(vb && vu == v2) {
+ logT(t, "Expecting equal values from %s: got golden: %v, decoded: %v", b, v2, vu)
+ failT(t)
+ }
+ }
+}
+
+func doTestRawValue(t *testing.T, name string, h Handle) {
+ testOnce.Do(testInitAll)
+ bh := h.getBasicHandle()
+ if !bh.Raw {
+ bh.Raw = true
+ defer func() { bh.Raw = false }()
+ }
+
+ var i, i2 int
+ var v, v2 TestRawValue
+ var bs, bs2 []byte
+
+ i = 1234 //1234567890
+ v = TestRawValue{I: i}
+ e := NewEncoderBytes(&bs, h)
+ e.MustEncode(v.I)
+ logT(t, ">>> raw: %v\n", bs)
+
+ v.R = Raw(bs)
+ e.ResetBytes(&bs2)
+ e.MustEncode(v)
+
+ logT(t, ">>> bs2: %v\n", bs2)
+ d := NewDecoderBytes(bs2, h)
+ d.MustDecode(&v2)
+ d.ResetBytes(v2.R)
+ logT(t, ">>> v2.R: %v\n", ([]byte)(v2.R))
+ d.MustDecode(&i2)
+
+ logT(t, ">>> Encoded %v, decoded %v\n", i, i2)
+ // logT(t, "Encoded %v, decoded %v", i, i2)
+ if i != i2 {
+ logT(t, "Error: encoded %v, decoded %v", i, i2)
+ failT(t)
+ }
+}
+
// Comprehensive testing that generates data encoded from python handle (cbor, msgpack),
// and validates that our code can read and write it out accordingly.
// We keep this unexported here, and put actual test in ext_dep_test.go.
// This way, it can be excluded by excluding file completely.
func doTestPythonGenStreams(t *testing.T, name string, h Handle) {
+ testOnce.Do(testInitAll)
logT(t, "TestPythonGenStreams-%v", name)
tmpdir, err := ioutil.TempDir("", "golang-"+name+"-test")
if err != nil {
logT(t, "-------- Unable to create temp directory\n")
- t.FailNow()
+ failT(t)
}
defer os.RemoveAll(tmpdir)
logT(t, "tmpdir: %v", tmpdir)
@@ -1065,7 +1322,7 @@ func doTestPythonGenStreams(t *testing.T, name string, h Handle) {
if cmdout, err = cmd.CombinedOutput(); err != nil {
logT(t, "-------- Error running test.py testdata. Err: %v", err)
logT(t, " %v", string(cmdout))
- t.FailNow()
+ failT(t)
}
bh := h.getBasicHandle()
@@ -1106,7 +1363,7 @@ func doTestPythonGenStreams(t *testing.T, name string, h Handle) {
if err = deepEqual(v, v1); err == nil {
logT(t, "++++++++ Objects match: %T, %v", v, v)
} else {
- logT(t, "-------- Objects do not match: %v. Source: %T. Decoded: %T", err, v, v1)
+ logT(t, "-------- FAIL: Objects do not match: %v. Source: %T. Decoded: %T", err, v, v1)
logT(t, "-------- GOLDEN: %#v", v)
// logT(t, "-------- DECODED: %#v <====> %#v", v1, reflect.Indirect(reflect.ValueOf(v1)).Interface())
logT(t, "-------- DECODED: %#v <====> %#v", v1, reflect.Indirect(reflect.ValueOf(v1)).Interface())
@@ -1121,7 +1378,7 @@ func doTestPythonGenStreams(t *testing.T, name string, h Handle) {
if err = deepEqual(bsb, bss); err == nil {
logT(t, "++++++++ Bytes match")
} else {
- logT(t, "???????? Bytes do not match. %v.", err)
+ logT(t, "???????? FAIL: Bytes do not match. %v.", err)
xs := "--------"
if reflect.ValueOf(v).Kind() == reflect.Map {
xs = " "
@@ -1150,6 +1407,7 @@ func doTestMsgpackRpcSpecGoClientToPythonSvc(t *testing.T) {
if testSkipRPCTests {
return
}
+ testOnce.Do(testInitAll)
// openPorts are between 6700 and 6800
r := rand.New(rand.NewSource(time.Now().UnixNano()))
openPort := strconv.FormatInt(6700+r.Int63n(99), 10)
@@ -1178,6 +1436,7 @@ func doTestMsgpackRpcSpecPythonClientToGoSvc(t *testing.T) {
if testSkipRPCTests {
return
}
+ testOnce.Do(testInitAll)
port := testCodecRpcOne(t, MsgpackSpecRpc, testMsgpackH, false, 1*time.Second)
//time.Sleep(1000 * time.Millisecond)
cmd := exec.Command("python", "test.py", "rpc-client-go-service", strconv.Itoa(port))
@@ -1186,12 +1445,255 @@ func doTestMsgpackRpcSpecPythonClientToGoSvc(t *testing.T) {
if cmdout, err = cmd.CombinedOutput(); err != nil {
logT(t, "-------- Error running test.py rpc-client-go-service. Err: %v", err)
logT(t, " %v", string(cmdout))
- t.FailNow()
+ failT(t)
}
checkEqualT(t, string(cmdout),
fmt.Sprintf("%#v\n%#v\n", []string{"A1", "B2", "C3"}, TestRpcABC{"Aa", "Bb", "Cc"}), "cmdout=")
}
+func doTestSwallowAndZero(t *testing.T, h Handle) {
+ testOnce.Do(testInitAll)
+ v1 := newTestStrucFlex(testDepth, testNumRepeatString, false, false, false)
+ var b1 []byte
+
+ e1 := NewEncoderBytes(&b1, h)
+ e1.MustEncode(v1)
+ d1 := NewDecoderBytes(b1, h)
+ d1.swallow()
+ if d1.r.numread() != len(b1) {
+ logT(t, "swallow didn't consume all encoded bytes: %v out of %v", d1.r.numread(), len(b1))
+ failT(t)
+ }
+ d1.setZero(v1)
+ testDeepEqualErr(v1, &TestStrucFlex{}, t, "filled-and-zeroed")
+}
+
+func doTestRawExt(t *testing.T, h Handle) {
+ testOnce.Do(testInitAll)
+ // return // TODO: need to fix this ...
+ var b []byte
+ var v interface{}
+ _, isJson := h.(*JsonHandle)
+ _, isCbor := h.(*CborHandle)
+ isValuer := isJson || isCbor
+ _ = isValuer
+ for _, r := range []RawExt{
+ {Tag: 99, Value: "9999", Data: []byte("9999")},
+ } {
+ e := NewEncoderBytes(&b, h)
+ e.MustEncode(&r)
+ d := NewDecoderBytes(b, h)
+ d.MustDecode(&v)
+ switch h.(type) {
+ case *JsonHandle:
+ testDeepEqualErr(r.Value, v, t, "rawext-json")
+ default:
+ r2 := r
+ if isValuer {
+ r2.Data = nil
+ } else {
+ r2.Value = nil
+ }
+ testDeepEqualErr(v, r2, t, "rawext-default")
+ }
+ }
+}
+
+func doTestMapStructKey(t *testing.T, h Handle) {
+ testOnce.Do(testInitAll)
+ var b []byte
+ var v interface{} // map[stringUint64T]wrapUint64Slice // interface{}
+ bh := h.getBasicHandle()
+ m := map[stringUint64T]wrapUint64Slice{
+ {"55555", 55555}: []wrapUint64{12345},
+ {"333", 333}: []wrapUint64{123},
+ }
+ oldCanonical := bh.Canonical
+ oldMapType := bh.MapType
+ defer func() {
+ bh.Canonical = oldCanonical
+ bh.MapType = oldMapType
+ }()
+
+ bh.MapType = reflect.TypeOf((*map[stringUint64T]wrapUint64Slice)(nil)).Elem()
+ for _, bv := range [2]bool{true, false} {
+ b, v = nil, nil
+ bh.Canonical = bv
+ e := NewEncoderBytes(&b, h)
+ e.MustEncode(m)
+ d := NewDecoderBytes(b, h)
+ d.MustDecode(&v)
+ testDeepEqualErr(v, m, t, "map-structkey")
+ }
+}
+
+func doTestDecodeNilMapValue(t *testing.T, handle Handle) {
+ type Struct struct {
+ Field map[uint16]map[uint32]struct{}
+ }
+
+ bh := handle.getBasicHandle()
+ oldMapType := bh.MapType
+ oldDeleteOnNilMapValue := bh.DeleteOnNilMapValue
+ defer func() {
+ bh.MapType = oldMapType
+ bh.DeleteOnNilMapValue = oldDeleteOnNilMapValue
+ }()
+ bh.MapType = reflect.TypeOf(map[interface{}]interface{}(nil))
+ bh.DeleteOnNilMapValue = false
+
+ _, isJsonHandle := handle.(*JsonHandle)
+
+ toEncode := Struct{Field: map[uint16]map[uint32]struct{}{
+ 1: nil,
+ }}
+
+ bs, err := testMarshal(toEncode, handle)
+ if err != nil {
+ logT(t, "Error encoding: %v, Err: %v", toEncode, err)
+ failT(t)
+ }
+ if isJsonHandle {
+ logT(t, "json encoded: %s\n", bs)
+ }
+
+ var decoded Struct
+ err = testUnmarshal(&decoded, bs, handle)
+ if err != nil {
+ logT(t, "Error decoding: %v", err)
+ failT(t)
+ }
+ if !reflect.DeepEqual(decoded, toEncode) {
+ logT(t, "Decoded value %#v != %#v", decoded, toEncode)
+ failT(t)
+ }
+}
+
+func doTestEmbeddedFieldPrecedence(t *testing.T, h Handle) {
+ type Embedded struct {
+ Field byte
+ }
+ type Struct struct {
+ Field byte
+ Embedded
+ }
+ toEncode := Struct{
+ Field: 1,
+ Embedded: Embedded{Field: 2},
+ }
+ _, isJsonHandle := h.(*JsonHandle)
+ handle := h.getBasicHandle()
+ oldMapType := handle.MapType
+ defer func() { handle.MapType = oldMapType }()
+
+ handle.MapType = reflect.TypeOf(map[interface{}]interface{}(nil))
+
+ bs, err := testMarshal(toEncode, h)
+ if err != nil {
+ logT(t, "Error encoding: %v, Err: %v", toEncode, err)
+ failT(t)
+ }
+
+ var decoded Struct
+ err = testUnmarshal(&decoded, bs, h)
+ if err != nil {
+ logT(t, "Error decoding: %v", err)
+ failT(t)
+ }
+
+ if decoded.Field != toEncode.Field {
+ logT(t, "Decoded result %v != %v", decoded.Field, toEncode.Field) // hex to look at what was encoded
+ if isJsonHandle {
+ logT(t, "JSON encoded as: %s", bs) // hex to look at what was encoded
+ }
+ failT(t)
+ }
+}
+
+func testRandomFillRV(v reflect.Value) {
+ testOnce.Do(testInitAll)
+ fneg := func() int64 {
+ i := rand.Intn(1)
+ if i == 1 {
+ return 1
+ }
+ return -1
+ }
+
+ switch v.Kind() {
+ case reflect.Invalid:
+ case reflect.Ptr:
+ if v.IsNil() {
+ v.Set(reflect.New(v.Type().Elem()))
+ }
+ testRandomFillRV(v.Elem())
+ case reflect.Interface:
+ if v.IsNil() {
+ v.Set(reflect.ValueOf("nothing"))
+ } else {
+ testRandomFillRV(v.Elem())
+ }
+ case reflect.Struct:
+ for i, n := 0, v.NumField(); i < n; i++ {
+ testRandomFillRV(v.Field(i))
+ }
+ case reflect.Slice:
+ if v.IsNil() {
+ v.Set(reflect.MakeSlice(v.Type(), 4, 4))
+ }
+ fallthrough
+ case reflect.Array:
+ for i, n := 0, v.Len(); i < n; i++ {
+ testRandomFillRV(v.Index(i))
+ }
+ case reflect.Map:
+ if v.IsNil() {
+ v.Set(reflect.MakeMap(v.Type()))
+ }
+ if v.Len() == 0 {
+ kt, vt := v.Type().Key(), v.Type().Elem()
+ for i := 0; i < 4; i++ {
+ k0 := reflect.New(kt).Elem()
+ v0 := reflect.New(vt).Elem()
+ testRandomFillRV(k0)
+ testRandomFillRV(v0)
+ v.SetMapIndex(k0, v0)
+ }
+ } else {
+ for _, k := range v.MapKeys() {
+ testRandomFillRV(v.MapIndex(k))
+ }
+ }
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+ v.SetInt(fneg() * rand.Int63n(127))
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
+ v.SetUint(uint64(rand.Int63n(255)))
+ case reflect.Bool:
+ if fneg() == 1 {
+ v.SetBool(true)
+ } else {
+ v.SetBool(false)
+ }
+ case reflect.Float32, reflect.Float64:
+ v.SetFloat(float64(fneg()) * float64(rand.Float32()))
+ case reflect.String:
+ v.SetString(strings.Repeat(strconv.FormatInt(rand.Int63n(99), 10), rand.Intn(8)))
+ default:
+ panic(fmt.Errorf("testRandomFillRV: unsupported type: %v", v.Kind()))
+ }
+}
+
+func testMammoth(t *testing.T, name string, h Handle) {
+ testOnce.Do(testInitAll)
+ var m, m2 TestMammoth
+ testRandomFillRV(reflect.ValueOf(&m).Elem())
+ b, _ := testMarshalErr(&m, h, t, "mammoth-"+name)
+ testUnmarshalErr(&m2, b, h, t, "mammoth-"+name)
+ testDeepEqualErr(&m, &m2, t, "mammoth-"+name)
+}
+
+// -----------------
+
func TestBincCodecsTable(t *testing.T) {
testCodecTableOne(t, testBincH)
}
@@ -1208,6 +1710,10 @@ func TestBincStdEncIntf(t *testing.T) {
doTestStdEncIntf(t, "binc", testBincH)
}
+func TestBincMammoth(t *testing.T) {
+ testMammoth(t, "binc", testBincH)
+}
+
func TestSimpleCodecsTable(t *testing.T) {
testCodecTableOne(t, testSimpleH)
}
@@ -1224,6 +1730,10 @@ func TestSimpleStdEncIntf(t *testing.T) {
doTestStdEncIntf(t, "simple", testSimpleH)
}
+func TestSimpleMammoth(t *testing.T) {
+ testMammoth(t, "simple", testSimpleH)
+}
+
func TestMsgpackCodecsTable(t *testing.T) {
testCodecTableOne(t, testMsgpackH)
}
@@ -1240,6 +1750,10 @@ func TestMsgpackStdEncIntf(t *testing.T) {
doTestStdEncIntf(t, "msgpack", testMsgpackH)
}
+func TestMsgpackMammoth(t *testing.T) {
+ testMammoth(t, "msgpack", testMsgpackH)
+}
+
func TestCborCodecsTable(t *testing.T) {
testCodecTableOne(t, testCborH)
}
@@ -1264,6 +1778,10 @@ func TestCborStdEncIntf(t *testing.T) {
doTestStdEncIntf(t, "cbor", testCborH)
}
+func TestCborMammoth(t *testing.T) {
+ testMammoth(t, "cbor", testCborH)
+}
+
func TestJsonCodecsTable(t *testing.T) {
testCodecTableOne(t, testJsonH)
}
@@ -1284,6 +1802,27 @@ func TestJsonStdEncIntf(t *testing.T) {
doTestStdEncIntf(t, "json", testJsonH)
}
+func TestJsonMammoth(t *testing.T) {
+ testMammoth(t, "json", testJsonH)
+}
+
+// ----- Raw ---------
+func TestJsonRaw(t *testing.T) {
+ doTestRawValue(t, "json", testJsonH)
+}
+func TestBincRaw(t *testing.T) {
+ doTestRawValue(t, "binc", testBincH)
+}
+func TestMsgpackRaw(t *testing.T) {
+ doTestRawValue(t, "msgpack", testMsgpackH)
+}
+func TestSimpleRaw(t *testing.T) {
+ doTestRawValue(t, "simple", testSimpleH)
+}
+func TestCborRaw(t *testing.T) {
+ doTestRawValue(t, "cbor", testCborH)
+}
+
// ----- ALL (framework based) -----
func TestAllEncCircularRef(t *testing.T) {
@@ -1324,6 +1863,315 @@ func TestBincUnderlyingType(t *testing.T) {
testCodecUnderlyingType(t, testBincH)
}
+func TestJsonSwallowAndZero(t *testing.T) {
+ doTestSwallowAndZero(t, testJsonH)
+}
+
+func TestCborSwallowAndZero(t *testing.T) {
+ doTestSwallowAndZero(t, testCborH)
+}
+
+func TestMsgpackSwallowAndZero(t *testing.T) {
+ doTestSwallowAndZero(t, testMsgpackH)
+}
+
+func TestBincSwallowAndZero(t *testing.T) {
+ doTestSwallowAndZero(t, testBincH)
+}
+
+func TestSimpleSwallowAndZero(t *testing.T) {
+ doTestSwallowAndZero(t, testSimpleH)
+}
+
+func TestJsonRawExt(t *testing.T) {
+ doTestRawExt(t, testJsonH)
+}
+
+func TestCborRawExt(t *testing.T) {
+ doTestRawExt(t, testCborH)
+}
+
+func TestMsgpackRawExt(t *testing.T) {
+ doTestRawExt(t, testMsgpackH)
+}
+
+func TestBincRawExt(t *testing.T) {
+ doTestRawExt(t, testBincH)
+}
+
+func TestSimpleRawExt(t *testing.T) {
+ doTestRawExt(t, testSimpleH)
+}
+
+func TestJsonMapStructKey(t *testing.T) {
+ doTestMapStructKey(t, testJsonH)
+}
+
+func TestCborMapStructKey(t *testing.T) {
+ doTestMapStructKey(t, testCborH)
+}
+
+func TestMsgpackMapStructKey(t *testing.T) {
+ doTestMapStructKey(t, testMsgpackH)
+}
+
+func TestBincMapStructKey(t *testing.T) {
+ doTestMapStructKey(t, testBincH)
+}
+
+func TestSimpleMapStructKey(t *testing.T) {
+ doTestMapStructKey(t, testSimpleH)
+}
+
+func TestJsonDecodeNilMapValue(t *testing.T) {
+ doTestDecodeNilMapValue(t, testJsonH)
+}
+
+func TestCborDecodeNilMapValue(t *testing.T) {
+ doTestDecodeNilMapValue(t, testCborH)
+}
+
+func TestMsgpackDecodeNilMapValue(t *testing.T) {
+ doTestDecodeNilMapValue(t, testMsgpackH)
+}
+
+func TestBincDecodeNilMapValue(t *testing.T) {
+ doTestDecodeNilMapValue(t, testBincH)
+}
+
+func TestSimpleDecodeNilMapValue(t *testing.T) {
+ doTestDecodeNilMapValue(t, testSimpleH)
+}
+
+func TestJsonEmbeddedFieldPrecedence(t *testing.T) {
+ doTestEmbeddedFieldPrecedence(t, testJsonH)
+}
+
+func TestCborEmbeddedFieldPrecedence(t *testing.T) {
+ doTestEmbeddedFieldPrecedence(t, testCborH)
+}
+
+func TestMsgpackEmbeddedFieldPrecedence(t *testing.T) {
+ doTestEmbeddedFieldPrecedence(t, testMsgpackH)
+}
+
+func TestBincEmbeddedFieldPrecedence(t *testing.T) {
+ doTestEmbeddedFieldPrecedence(t, testBincH)
+}
+
+func TestSimpleEmbeddedFieldPrecedence(t *testing.T) {
+ doTestEmbeddedFieldPrecedence(t, testSimpleH)
+}
+
+func TestJsonLargeInteger(t *testing.T) {
+ for _, i := range []uint8{'L', 'A', 0} {
+ for _, j := range []interface{}{
+ int64(1 << 60),
+ -int64(1 << 60),
+ 0,
+ 1 << 20,
+ -(1 << 20),
+ uint64(1 << 60),
+ uint(0),
+ uint(1 << 20),
+ } {
+ doTestJsonLargeInteger(t, j, i)
+ }
+ }
+}
+
+func TestJsonDecodeNonStringScalarInStringContext(t *testing.T) {
+ var b = `{"s.true": "true", "b.true": true, "s.false": "false", "b.false": false, "s.10": "10", "i.10": 10, "i.-10": -10}`
+ var golden = map[string]string{"s.true": "true", "b.true": "true", "s.false": "false", "b.false": "false", "s.10": "10", "i.10": "10", "i.-10": "-10"}
+
+ var m map[string]string
+ d := NewDecoderBytes([]byte(b), testJsonH)
+ d.MustDecode(&m)
+ if err := deepEqual(golden, m); err == nil {
+ logT(t, "++++ match: decoded: %#v", m)
+ } else {
+ logT(t, "---- mismatch: %v ==> golden: %#v, decoded: %#v", err, golden, m)
+ failT(t)
+ }
+}
+
+func TestJsonEncodeIndent(t *testing.T) {
+ v := TestSimplish{
+ Ii: -794,
+ Ss: `A Man is
+after the new line
+ after new line and tab
+`,
+ }
+ v2 := v
+ v.Mm = make(map[string]*TestSimplish)
+ for i := 0; i < len(v.Ar); i++ {
+ v3 := v2
+ v3.Ii += (i * 4)
+ v3.Ss = fmt.Sprintf("%d - %s", v3.Ii, v3.Ss)
+ if i%2 == 0 {
+ v.Ar[i] = &v3
+ }
+ // v3 = v2
+ v.Sl = append(v.Sl, &v3)
+ v.Mm[strconv.FormatInt(int64(i), 10)] = &v3
+ }
+ oldcan := testJsonH.Canonical
+ oldIndent := testJsonH.Indent
+ oldS2A := testJsonH.StructToArray
+ defer func() {
+ testJsonH.Canonical = oldcan
+ testJsonH.Indent = oldIndent
+ testJsonH.StructToArray = oldS2A
+ }()
+ testJsonH.Canonical = true
+ testJsonH.Indent = -1
+ testJsonH.StructToArray = false
+ var bs []byte
+ NewEncoderBytes(&bs, testJsonH).MustEncode(&v)
+ txt1Tab := string(bs)
+ bs = nil
+ testJsonH.Indent = 120
+ NewEncoderBytes(&bs, testJsonH).MustEncode(&v)
+ txtSpaces := string(bs)
+ // fmt.Printf("\n-----------\n%s\n------------\n%s\n-------------\n", txt1Tab, txtSpaces)
+
+ goldenResultTab := `{
+ "Ar": [
+ {
+ "Ar": [
+ null,
+ null
+ ],
+ "Ii": -794,
+ "Mm": null,
+ "Sl": null,
+ "Ss": "-794 - A Man is\nafter the new line\n\tafter new line and tab\n"
+ },
+ null
+ ],
+ "Ii": -794,
+ "Mm": {
+ "0": {
+ "Ar": [
+ null,
+ null
+ ],
+ "Ii": -794,
+ "Mm": null,
+ "Sl": null,
+ "Ss": "-794 - A Man is\nafter the new line\n\tafter new line and tab\n"
+ },
+ "1": {
+ "Ar": [
+ null,
+ null
+ ],
+ "Ii": -790,
+ "Mm": null,
+ "Sl": null,
+ "Ss": "-790 - A Man is\nafter the new line\n\tafter new line and tab\n"
+ }
+ },
+ "Sl": [
+ {
+ "Ar": [
+ null,
+ null
+ ],
+ "Ii": -794,
+ "Mm": null,
+ "Sl": null,
+ "Ss": "-794 - A Man is\nafter the new line\n\tafter new line and tab\n"
+ },
+ {
+ "Ar": [
+ null,
+ null
+ ],
+ "Ii": -790,
+ "Mm": null,
+ "Sl": null,
+ "Ss": "-790 - A Man is\nafter the new line\n\tafter new line and tab\n"
+ }
+ ],
+ "Ss": "A Man is\nafter the new line\n\tafter new line and tab\n"
+}`
+
+ if txt1Tab != goldenResultTab {
+ logT(t, "decoded indented with tabs != expected: \nexpected: %s\nencoded: %s", goldenResultTab, txt1Tab)
+ failT(t)
+ }
+ if txtSpaces != strings.Replace(goldenResultTab, "\t", strings.Repeat(" ", 120), -1) {
+ logT(t, "decoded indented with spaces != expected: \nexpected: %s\nencoded: %s", goldenResultTab, txtSpaces)
+ failT(t)
+ }
+}
+
+func TestBufioDecReader(t *testing.T) {
+ // try to read 85 bytes in chunks of 7 at a time.
+ var s = strings.Repeat("01234'56789 ", 5)
+ // fmt.Printf("s: %s\n", s)
+ var r = strings.NewReader(s)
+ var br = &bufioDecReader{r: r, buf: make([]byte, 0, 13)}
+ b, err := ioutil.ReadAll(br)
+ if err != nil {
+ panic(err)
+ }
+ var s2 = string(b)
+ // fmt.Printf("s==s2: %v, len(s): %v, len(b): %v, len(s2): %v\n", s == s2, len(s), len(b), len(s2))
+ if s != s2 {
+ logT(t, "not equal: \ns: %s\ns2: %s", s, s2)
+ failT(t)
+ }
+ // Now, test search functions for skip, readTo and readUntil
+ // readUntil ', readTo ', skip whitespace. 3 times in a loop, each time compare the token and/or outs
+ // readUntil: see: 56789
+ var out []byte
+ var token byte
+ br = &bufioDecReader{r: strings.NewReader(s), buf: make([]byte, 0, 7)}
+ // println()
+ for _, v2 := range [...]string{
+ `01234'`,
+ `56789 01234'`,
+ `56789 01234'`,
+ `56789 01234'`,
+ } {
+ out = br.readUntil(nil, '\'')
+ testDeepEqualErr(string(out), v2, t, "-")
+ // fmt.Printf("readUntil: out: `%s`\n", out)
+ }
+ br = &bufioDecReader{r: strings.NewReader(s), buf: make([]byte, 0, 7)}
+ // println()
+ for range [4]struct{}{} {
+ out = br.readTo(nil, &jsonNumSet)
+ testDeepEqualErr(string(out), `01234`, t, "-")
+ // fmt.Printf("readTo: out: `%s`\n", out)
+ out = br.readUntil(nil, '\'')
+ testDeepEqualErr(string(out), "'", t, "-")
+ // fmt.Printf("readUntil: out: `%s`\n", out)
+ out = br.readTo(nil, &jsonNumSet)
+ testDeepEqualErr(string(out), `56789`, t, "-")
+ // fmt.Printf("readTo: out: `%s`\n", out)
+ out = br.readUntil(nil, '0')
+ testDeepEqualErr(string(out), ` 0`, t, "-")
+ // fmt.Printf("readUntil: out: `%s`\n", out)
+ br.UnreadByte()
+ }
+ br = &bufioDecReader{r: strings.NewReader(s), buf: make([]byte, 0, 7)}
+ // println()
+ for range [4]struct{}{} {
+ out = br.readUntil(nil, ' ')
+ testDeepEqualErr(string(out), `01234'56789 `, t, "-")
+ // fmt.Printf("readUntil: out: |%s|\n", out)
+ token = br.skip(&jsonCharWhitespaceSet)
+ testDeepEqualErr(token, byte('0'), t, "-")
+ // fmt.Printf("skip: token: '%c'\n", token)
+ br.UnreadByte()
+ }
+ // println()
+}
+
// TODO:
// Add Tests for:
// - decoding empty list/map in stream into a nil slice/map
@@ -1338,7 +2186,23 @@ func TestBincUnderlyingType(t *testing.T) {
// - struct tags:
// on anonymous fields, _struct (all fields), etc
// - codecgen of struct containing channels.
+//
+// Add negative tests for failure conditions:
// - bad input with large array length prefix
//
-// Cleanup tests:
-// - The are brittle in their handling of validation and skipping
+// More tests:
+// - length of containers (array, string, bytes, map):
+// len = 0
+// maxUint16 < len < maxuint32
+// len > maxuint32
+// - large numbers: in every range: up to maxuint8, maxuint16, maxuint32, maxuint64
+// int64
+// uint64
+// - standard numbers:
+// 0, -1, 1, +inf, -inf, 0.0f, etc
+// - (encode ext, encode raw ext, etc)
+// (include extensions)
+// - tracking:
+// z.trb: track, stop track, check
+// - test with diff: mapType and sliceType, and decodeNaked
+// - decodeAsNil: for maps, slices, etc
diff --git a/codec/codecgen/README.md b/codec/codecgen/README.md
index 3ae8a05..854b64b 100644
--- a/codec/codecgen/README.md
+++ b/codec/codecgen/README.md
@@ -23,6 +23,7 @@ Usage of codecgen:
-c="github.com/ugorji/go/codec": codec path
-o="": out file
-r=".*": regex for type name to match
+ -nr="": regex for type name to exclude
-rt="": tags for go run
-t="": build tag to put in file
-u=false: Use unsafe, e.g. to avoid unnecessary allocation on []byte->string
diff --git a/codec/codecgen/gen.go b/codec/codecgen/gen.go
index f370b4c..bf26fa9 100644
--- a/codec/codecgen/gen.go
+++ b/codec/codecgen/gen.go
@@ -20,6 +20,7 @@ import (
"path/filepath"
"regexp"
"strconv"
+ "strings"
"text/template"
"time"
)
@@ -61,7 +62,7 @@ func CodecGenTempWrite{{ .RandString }}() {
var t{{ $index }} {{ . }}
typs = append(typs, reflect.TypeOf(t{{ $index }}))
{{ end }}
- {{ if not .CodecPkgFiles }}{{ .CodecPkgName }}.{{ end }}Gen(&out, "{{ .BuildTag }}", "{{ .PackageName }}", "{{ .RandString }}", {{ .UseUnsafe }}, {{ if not .CodecPkgFiles }}{{ .CodecPkgName }}.{{ end }}NewTypeInfos(strings.Split("{{ .StructTags }}", ",")), typs...)
+ {{ if not .CodecPkgFiles }}{{ .CodecPkgName }}.{{ end }}Gen(&out, "{{ .BuildTag }}", "{{ .PackageName }}", "{{ .RandString }}", {{ .NoExtensions }}, {{ if not .CodecPkgFiles }}{{ .CodecPkgName }}.{{ end }}NewTypeInfos(strings.Split("{{ .StructTags }}", ",")), typs...)
bout, err := format.Source(out.Bytes())
if err != nil {
fout.Write(out.Bytes())
@@ -81,8 +82,12 @@ func CodecGenTempWrite{{ .RandString }}() {
// Tool then executes: "go run __frun__" which creates fout.
// fout contains Codec(En|De)codeSelf implementations for every type T.
//
-func Generate(outfile, buildTag, codecPkgPath string, uid int64, useUnsafe bool, goRunTag string,
- st string, regexName *regexp.Regexp, deleteTempFile bool, infiles ...string) (err error) {
+func Generate(outfile, buildTag, codecPkgPath string,
+ uid int64,
+ goRunTag string, st string,
+ regexName, notRegexName *regexp.Regexp,
+ deleteTempFile, noExtensions bool,
+ infiles ...string) (err error) {
// For each file, grab AST, find each type, and write a call to it.
if len(infiles) == 0 {
return
@@ -120,21 +125,24 @@ func Generate(outfile, buildTag, codecPkgPath string, uid int64, useUnsafe bool,
StructTags string
Types []string
CodecPkgFiles bool
- UseUnsafe bool
+ NoExtensions bool
}
tv := tmplT{
CodecPkgName: genCodecPkg,
OutFile: outfile,
CodecImportPath: codecPkgPath,
BuildTag: buildTag,
- UseUnsafe: useUnsafe,
RandString: strconv.FormatInt(uid, 10),
StructTags: st,
+ NoExtensions: noExtensions,
}
tv.ImportPath = pkg.ImportPath
if tv.ImportPath == tv.CodecImportPath {
tv.CodecPkgFiles = true
tv.CodecPkgName = "codec"
+ } else {
+ // HACK: always handle vendoring. It should be typically on in go 1.6, 1.7
+ tv.ImportPath = stripVendor(tv.ImportPath)
}
astfiles := make([]*ast.File, len(infiles))
for i, infile := range infiles {
@@ -160,6 +168,31 @@ func Generate(outfile, buildTag, codecPkgPath string, uid int64, useUnsafe bool,
}
}
+ // keep track of types with selfer methods
+ // selferMethods := []string{"CodecEncodeSelf", "CodecDecodeSelf"}
+ selferEncTyps := make(map[string]bool)
+ selferDecTyps := make(map[string]bool)
+ for _, f := range astfiles {
+ for _, d := range f.Decls {
+ // if fd, ok := d.(*ast.FuncDecl); ok && fd.Recv != nil && fd.Recv.NumFields() == 1 {
+ if fd, ok := d.(*ast.FuncDecl); ok && fd.Recv != nil && len(fd.Recv.List) == 1 {
+ recvType := fd.Recv.List[0].Type
+ if ptr, ok := recvType.(*ast.StarExpr); ok {
+ recvType = ptr.X
+ }
+ if id, ok := recvType.(*ast.Ident); ok {
+ switch fd.Name.Name {
+ case "CodecEncodeSelf":
+ selferEncTyps[id.Name] = true
+ case "CodecDecodeSelf":
+ selferDecTyps[id.Name] = true
+ }
+ }
+ }
+ }
+ }
+
+ // now find types
for _, f := range astfiles {
for _, d := range f.Decls {
if gd, ok := d.(*ast.GenDecl); ok {
@@ -180,7 +213,14 @@ func Generate(outfile, buildTag, codecPkgPath string, uid int64, useUnsafe bool,
// FuncType, InterfaceType, StarExpr (ptr), etc
switch td.Type.(type) {
case *ast.StructType, *ast.Ident, *ast.MapType, *ast.ArrayType, *ast.ChanType:
- if regexName.FindStringIndex(td.Name.Name) != nil {
+ // only add to tv.Types iff
+ // - it matches per the -r parameter
+ // - it doesn't match per the -nr parameter
+ // - it doesn't have any of the Selfer methods in the file
+ if regexName.FindStringIndex(td.Name.Name) != nil &&
+ notRegexName.FindStringIndex(td.Name.Name) == nil &&
+ !selferEncTyps[td.Name.Name] &&
+ !selferDecTyps[td.Name.Name] {
tv.Types = append(tv.Types, td.Name.Name)
}
}
@@ -220,7 +260,7 @@ func Generate(outfile, buildTag, codecPkgPath string, uid int64, useUnsafe bool,
os.Remove(outfile)
// execute go run frun
- cmd := exec.Command("go", "run", "-tags="+goRunTag, frunMainName) //, frunPkg.Name())
+ cmd := exec.Command("go", "run", "-tags", "codecgen.exec safe "+goRunTag, frunMainName) //, frunPkg.Name())
var buf bytes.Buffer
cmd.Stdout = &buf
cmd.Stderr = &buf
@@ -254,19 +294,37 @@ func gen1(frunName, tmplStr string, tv interface{}) (frun *os.File, err error) {
return
}
+// copied from ../gen.go (keep in sync).
+func stripVendor(s string) string {
+ // HACK: Misbehaviour occurs in go 1.5. May have to re-visit this later.
+ // if s contains /vendor/ OR startsWith vendor/, then return everything after it.
+ const vendorStart = "vendor/"
+ const vendorInline = "/vendor/"
+ if i := strings.LastIndex(s, vendorInline); i >= 0 {
+ s = s[i+len(vendorInline):]
+ } else if strings.HasPrefix(s, vendorStart) {
+ s = s[len(vendorStart):]
+ }
+ return s
+}
+
func main() {
o := flag.String("o", "", "out file")
c := flag.String("c", genCodecPath, "codec path")
t := flag.String("t", "", "build tag to put in file")
r := flag.String("r", ".*", "regex for type name to match")
+ nr := flag.String("nr", "^$", "regex for type name to exclude")
rt := flag.String("rt", "", "tags for go run")
st := flag.String("st", "codec,json", "struct tag keys to introspect")
x := flag.Bool("x", false, "keep temp file")
- u := flag.Bool("u", false, "Use unsafe, e.g. to avoid unnecessary allocation on []byte->string")
+ _ = flag.Bool("u", false, "*IGNORED - kept for backwards compatibility*: Allow unsafe use")
d := flag.Int64("d", 0, "random identifier for use in generated code")
+ nx := flag.Bool("nx", false, "no extensions")
+
flag.Parse()
- if err := Generate(*o, *t, *c, *d, *u, *rt, *st,
- regexp.MustCompile(*r), !*x, flag.Args()...); err != nil {
+ if err := Generate(*o, *t, *c, *d, *rt, *st,
+ regexp.MustCompile(*r), regexp.MustCompile(*nr), !*x, *nx,
+ flag.Args()...); err != nil {
fmt.Fprintf(os.Stderr, "codecgen error: %v\n", err)
os.Exit(1)
}
diff --git a/codec/codecgen_test.go b/codec/codecgen_test.go
deleted file mode 100644
index a73497e..0000000
--- a/codec/codecgen_test.go
+++ /dev/null
@@ -1,24 +0,0 @@
-//+build x,codecgen
-
-package codec
-
-import (
- "fmt"
- "testing"
-)
-
-func _TestCodecgenJson1(t *testing.T) {
- // This is just a simplistic test for codecgen.
- // It is typically disabled. We only enable it for debugging purposes.
- const callCodecgenDirect bool = true
- v := newTestStruc(2, false, !testSkipIntf, false)
- var bs []byte
- e := NewEncoderBytes(&bs, testJsonH)
- if callCodecgenDirect {
- v.CodecEncodeSelf(e)
- e.w.atEndOfEncode()
- } else {
- e.MustEncode(v)
- }
- fmt.Printf("%s\n", bs)
-}
diff --git a/codec/decode.go b/codec/decode.go
index 7e56f1e..246533f 100644
--- a/codec/decode.go
+++ b/codec/decode.go
@@ -9,6 +9,7 @@ import (
"fmt"
"io"
"reflect"
+ "sync"
"time"
)
@@ -21,6 +22,10 @@ const (
var (
onlyMapOrArrayCanDecodeIntoStructErr = errors.New("only encoded map or array can be decoded into a struct")
cannotDecodeIntoNilErr = errors.New("cannot decode into nil")
+
+ decUnreadByteNothingToReadErr = errors.New("cannot unread - nothing has been read")
+ decUnreadByteLastByteNotReadErr = errors.New("cannot unread - last byte has not been read")
+ decUnreadByteUnknownErr = errors.New("cannot unread - reason unknown")
)
// decReader abstracts the reading source, allowing implementations that can
@@ -34,24 +39,37 @@ type decReader interface {
readx(n int) []byte
readb([]byte)
readn1() uint8
- readn1eof() (v uint8, eof bool)
+ readn3() (uint8, uint8, uint8)
+ readn4() (uint8, uint8, uint8, uint8)
+ // readn1eof() (v uint8, eof bool)
numread() int // number of bytes read
track()
stopTrack() []byte
-}
-type decReaderByteScanner interface {
- io.Reader
- io.ByteScanner
+ // skip will skip any byte that matches, and return the first non-matching byte
+ skip(accept *bitset256) (token byte)
+ // readTo will read any byte that matches, stopping once no-longer matching.
+ readTo(in []byte, accept *bitset256) (out []byte)
+ // readUntil will read, only stopping once it matches the 'stop' byte.
+ readUntil(in []byte, stop byte) (out []byte)
}
+// type decReaderByteScanner interface {
+// io.Reader
+// io.ByteScanner
+// }
+
type decDriver interface {
// this will check if the next token is a break.
CheckBreak() bool
+ // Note: TryDecodeAsNil should be careful not to share any temporary []byte with
+ // the rest of the decDriver. This is because sometimes, we optimize by holding onto
+ // a transient []byte, and ensuring the only other call we make to the decDriver
+ // during that time is maybe a TryDecodeAsNil() call.
TryDecodeAsNil() bool
// vt is one of: Bytes, String, Nil, Slice or Map. Return unSet if not known.
ContainerType() (vt valueType)
- IsBuiltinType(rt uintptr) bool
+ // IsBuiltinType(rt uintptr) bool
DecodeBuiltin(rt uintptr, v interface{})
// DecodeNaked will decode primitives (number, bool, string, []byte) and RawExt.
@@ -76,25 +94,43 @@ type decDriver interface {
// return a pre-stored string value, meaning that it can bypass
// the cost of []byte->string conversion.
DecodeString() (s string)
+ DecodeStringAsBytes() (v []byte)
// DecodeBytes may be called directly, without going through reflection.
// Consequently, it must be designed to handle possible nil.
- DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte)
+ DecodeBytes(bs []byte, zerocopy bool) (bsOut []byte)
+ // DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte)
// decodeExt will decode into a *RawExt or into an extension.
DecodeExt(v interface{}, xtag uint64, ext Ext) (realxtag uint64)
// decodeExt(verifyTag bool, tag byte) (xtag byte, xbs []byte)
- ReadMapStart() int
ReadArrayStart() int
+ ReadArrayElem()
+ ReadArrayEnd()
+ ReadMapStart() int
+ ReadMapElemKey()
+ ReadMapElemValue()
+ ReadMapEnd()
reset()
uncacheRead()
}
-type decNoSeparator struct{}
+// type decNoSeparator struct {}
+// func (_ decNoSeparator) ReadEnd() {}
-func (_ decNoSeparator) ReadEnd() {}
-func (_ decNoSeparator) uncacheRead() {}
+type decDriverNoopContainerReader struct{}
+
+func (_ decDriverNoopContainerReader) ReadArrayStart() (v int) { return }
+func (_ decDriverNoopContainerReader) ReadArrayElem() {}
+func (_ decDriverNoopContainerReader) ReadArrayEnd() {}
+func (_ decDriverNoopContainerReader) ReadMapStart() (v int) { return }
+func (_ decDriverNoopContainerReader) ReadMapElemKey() {}
+func (_ decDriverNoopContainerReader) ReadMapElemValue() {}
+func (_ decDriverNoopContainerReader) ReadMapEnd() {}
+func (_ decDriverNoopContainerReader) CheckBreak() (v bool) { return }
+
+// func (_ decNoSeparator) uncacheRead() {}
type DecodeOptions struct {
// MapType specifies type to use during schema-less decoding of a map in the stream.
@@ -105,10 +141,10 @@ type DecodeOptions struct {
// If nil, we use []interface{}
SliceType reflect.Type
- // MaxInitLen defines the initial length that we "make" a collection (slice, chan or map) with.
+ // MaxInitLen defines the maxinum initial length that we "make" a collection (string, slice, map, chan).
// If 0 or negative, we default to a sensible value based on the size of an element in the collection.
//
- // For example, when decoding, a stream may say that it has MAX_UINT elements.
+ // For example, when decoding, a stream may say that it has 2^64 elements.
// We should not auto-matically provision a slice of that length, to prevent Out-Of-Memory crash.
// Instead, we provision up to MaxInitLen, fill that up, and start appending after that.
MaxInitLen int
@@ -139,6 +175,11 @@ type DecodeOptions struct {
// or is an interface.
MapValueReset bool
+ // SliceElementReset: on decoding a slice, reset the element to a zero value first.
+ //
+ // concern: if the slice already contained some garbage, we will decode into that garbage.
+ SliceElementReset bool
+
// InterfaceReset controls how we decode into an interface.
//
// By default, when we see a field that is an interface{...},
@@ -159,22 +200,385 @@ type DecodeOptions struct {
// look them up from a map (than to allocate them afresh).
//
// Note: Handles will be smart when using the intern functionality.
- // So everything will not be interned.
+ // Every string should not be interned.
+ // An excellent use-case for interning is struct field names,
+ // or map keys where key type is string.
InternString bool
+
+ // PreferArrayOverSlice controls whether to decode to an array or a slice.
+ //
+ // This only impacts decoding into a nil interface{}.
+ // Consequently, it has no effect on codecgen.
+ //
+ // *Note*: This only applies if using go1.5 and above,
+ // as it requires reflect.ArrayOf support which was absent before go1.5.
+ PreferArrayOverSlice bool
+
+ // DeleteOnNilMapValue controls how to decode a nil value in the stream.
+ //
+ // If true, we will delete the mapping of the key.
+ // Else, just set the mapping to the zero value of the type.
+ DeleteOnNilMapValue bool
+
+ // ReaderBufferSize is the size of the buffer used when reading.
+ //
+ // if > 0, we use a smart buffer internally for performance purposes.
+ ReaderBufferSize int
}
// ------------------------------------
-// ioDecByteScanner implements Read(), ReadByte(...), UnreadByte(...) methods
-// of io.Reader, io.ByteScanner.
-type ioDecByteScanner struct {
- r io.Reader
- l byte // last byte
- ls byte // last byte status. 0: init-canDoNothing, 1: canRead, 2: canUnread
- b [1]byte // tiny buffer for reading single bytes
+type bufioDecReader struct {
+ buf []byte
+ r io.Reader
+
+ c int // cursor
+ n int // num read
+ err error
+
+ trb bool
+ tr []byte
+
+ b [8]byte
+}
+
+func (z *bufioDecReader) reset(r io.Reader) {
+ z.r, z.c, z.n, z.err, z.trb = r, 0, 0, nil, false
+ if z.tr != nil {
+ z.tr = z.tr[:0]
+ }
+}
+
+func (z *bufioDecReader) Read(p []byte) (n int, err error) {
+ if z.err != nil {
+ return 0, z.err
+ }
+ p0 := p
+ n = copy(p, z.buf[z.c:])
+ z.c += n
+ if z.c == len(z.buf) {
+ z.c = 0
+ }
+ z.n += n
+ if len(p) == n {
+ if z.c == 0 {
+ z.buf = z.buf[:1]
+ z.buf[0] = p[len(p)-1]
+ z.c = 1
+ }
+ if z.trb {
+ z.tr = append(z.tr, p0[:n]...)
+ }
+ return
+ }
+ p = p[n:]
+ var n2 int
+ // if we are here, then z.buf is all read
+ if len(p) > len(z.buf) {
+ n2, err = decReadFull(z.r, p)
+ n += n2
+ z.n += n2
+ z.err = err
+ // don't return EOF if some bytes were read. keep for next time.
+ if n > 0 && err == io.EOF {
+ err = nil
+ }
+ // always keep last byte in z.buf
+ z.buf = z.buf[:1]
+ z.buf[0] = p[len(p)-1]
+ z.c = 1
+ if z.trb {
+ z.tr = append(z.tr, p0[:n]...)
+ }
+ return
+ }
+ // z.c is now 0, and len(p) <= len(z.buf)
+ for len(p) > 0 && z.err == nil {
+ // println("len(p) loop starting ... ")
+ z.c = 0
+ z.buf = z.buf[0:cap(z.buf)]
+ n2, err = z.r.Read(z.buf)
+ if n2 > 0 {
+ if err == io.EOF {
+ err = nil
+ }
+ z.buf = z.buf[:n2]
+ n2 = copy(p, z.buf)
+ z.c = n2
+ n += n2
+ z.n += n2
+ p = p[n2:]
+ }
+ z.err = err
+ // println("... len(p) loop done")
+ }
+ if z.c == 0 {
+ z.buf = z.buf[:1]
+ z.buf[0] = p[len(p)-1]
+ z.c = 1
+ }
+ if z.trb {
+ z.tr = append(z.tr, p0[:n]...)
+ }
+ return
+}
+
+func (z *bufioDecReader) ReadByte() (b byte, err error) {
+ z.b[0] = 0
+ _, err = z.Read(z.b[:1])
+ b = z.b[0]
+ return
+}
+
+func (z *bufioDecReader) UnreadByte() (err error) {
+ if z.err != nil {
+ return z.err
+ }
+ if z.c > 0 {
+ z.c--
+ z.n--
+ if z.trb {
+ z.tr = z.tr[:len(z.tr)-1]
+ }
+ return
+ }
+ return decUnreadByteNothingToReadErr
+}
+
+func (z *bufioDecReader) numread() int {
+ return z.n
}
-func (z *ioDecByteScanner) Read(p []byte) (n int, err error) {
+func (z *bufioDecReader) readx(n int) (bs []byte) {
+ if n <= 0 || z.err != nil {
+ return
+ }
+ if z.c+n <= len(z.buf) {
+ bs = z.buf[z.c : z.c+n]
+ z.n += n
+ z.c += n
+ if z.trb {
+ z.tr = append(z.tr, bs...)
+ }
+ return
+ }
+ bs = make([]byte, n)
+ _, err := z.Read(bs)
+ if err != nil {
+ panic(err)
+ }
+ return
+}
+
+func (z *bufioDecReader) readb(bs []byte) {
+ _, err := z.Read(bs)
+ if err != nil {
+ panic(err)
+ }
+}
+
+// func (z *bufioDecReader) readn1eof() (b uint8, eof bool) {
+// b, err := z.ReadByte()
+// if err != nil {
+// if err == io.EOF {
+// eof = true
+// } else {
+// panic(err)
+// }
+// }
+// return
+// }
+
+func (z *bufioDecReader) readn1() (b uint8) {
+ b, err := z.ReadByte()
+ if err != nil {
+ panic(err)
+ }
+ return
+}
+
+func (z *bufioDecReader) readn3() (b1, b2, b3 uint8) {
+ z.readb(z.b[:3])
+ return z.b[0], z.b[1], z.b[2]
+}
+
+func (z *bufioDecReader) readn4() (b1, b2, b3, b4 uint8) {
+ z.readb(z.b[:4])
+ return z.b[0], z.b[1], z.b[2], z.b[3]
+}
+
+func (z *bufioDecReader) search(in []byte, accept *bitset256, stop, flag uint8) (token byte, out []byte) {
+ // flag: 1 (skip), 2 (readTo), 4 (readUntil)
+ if flag == 4 {
+ for i := z.c; i < len(z.buf); i++ {
+ if z.buf[i] == stop {
+ token = z.buf[i]
+ z.n = z.n + (i - z.c) - 1
+ i++
+ out = z.buf[z.c:i]
+ if z.trb {
+ z.tr = append(z.tr, z.buf[z.c:i]...)
+ }
+ z.c = i
+ return
+ }
+ }
+ } else {
+ for i := z.c; i < len(z.buf); i++ {
+ if !accept.isset(z.buf[i]) {
+ token = z.buf[i]
+ z.n = z.n + (i - z.c) - 1
+ if flag == 1 {
+ i++
+ } else {
+ out = z.buf[z.c:i]
+ }
+ if z.trb {
+ z.tr = append(z.tr, z.buf[z.c:i]...)
+ }
+ z.c = i
+ return
+ }
+ }
+ }
+ z.n += len(z.buf) - z.c
+ if flag != 1 {
+ out = append(in, z.buf[z.c:]...)
+ }
+ if z.trb {
+ z.tr = append(z.tr, z.buf[z.c:]...)
+ }
+ var n2 int
+ if z.err != nil {
+ return
+ }
+ for {
+ z.c = 0
+ z.buf = z.buf[0:cap(z.buf)]
+ n2, z.err = z.r.Read(z.buf)
+ if n2 > 0 && z.err != nil {
+ z.err = nil
+ }
+ z.buf = z.buf[:n2]
+ if flag == 4 {
+ for i := 0; i < n2; i++ {
+ if z.buf[i] == stop {
+ token = z.buf[i]
+ z.n += i - 1
+ i++
+ out = append(out, z.buf[z.c:i]...)
+ if z.trb {
+ z.tr = append(z.tr, z.buf[z.c:i]...)
+ }
+ z.c = i
+ return
+ }
+ }
+ } else {
+ for i := 0; i < n2; i++ {
+ if !accept.isset(z.buf[i]) {
+ token = z.buf[i]
+ z.n += i - 1
+ if flag == 1 {
+ i++
+ }
+ if flag != 1 {
+ out = append(out, z.buf[z.c:i]...)
+ }
+ if z.trb {
+ z.tr = append(z.tr, z.buf[z.c:i]...)
+ }
+ z.c = i
+ return
+ }
+ }
+ }
+ if flag != 1 {
+ out = append(out, z.buf[:n2]...)
+ }
+ z.n += n2
+ if z.err != nil {
+ return
+ }
+ if z.trb {
+ z.tr = append(z.tr, z.buf[:n2]...)
+ }
+ }
+}
+
+func (z *bufioDecReader) skip(accept *bitset256) (token byte) {
+ token, _ = z.search(nil, accept, 0, 1)
+ return
+}
+
+func (z *bufioDecReader) readTo(in []byte, accept *bitset256) (out []byte) {
+ _, out = z.search(in, accept, 0, 2)
+ return
+}
+
+func (z *bufioDecReader) readUntil(in []byte, stop byte) (out []byte) {
+ _, out = z.search(in, nil, stop, 4)
+ return
+}
+
+func (z *bufioDecReader) unreadn1() {
+ err := z.UnreadByte()
+ if err != nil {
+ panic(err)
+ }
+}
+
+func (z *bufioDecReader) track() {
+ if z.tr != nil {
+ z.tr = z.tr[:0]
+ }
+ z.trb = true
+}
+
+func (z *bufioDecReader) stopTrack() (bs []byte) {
+ z.trb = false
+ return z.tr
+}
+
+// ioDecReader is a decReader that reads off an io.Reader.
+//
+// It also has a fallback implementation of ByteScanner if needed.
+type ioDecReader struct {
+ r io.Reader // the reader passed in
+
+ rr io.Reader
+ br io.ByteScanner
+
+ l byte // last byte
+ ls byte // last byte status. 0: init-canDoNothing, 1: canRead, 2: canUnread
+ b [4]byte // tiny buffer for reading single bytes
+ trb bool // tracking bytes turned on
+
+ // temp byte array re-used internally for efficiency during read.
+ // shares buffer with Decoder, so we keep size of struct within 8 words.
+ x *[scratchByteArrayLen]byte
+ n int // num read
+ tr []byte // tracking bytes read
+}
+
+func (z *ioDecReader) reset(r io.Reader) {
+ z.r = r
+ z.rr = r
+ z.l, z.ls, z.n, z.trb = 0, 0, 0, false
+ if z.tr != nil {
+ z.tr = z.tr[:0]
+ }
+ var ok bool
+ if z.br, ok = r.(io.ByteScanner); !ok {
+ z.br = z
+ z.rr = z
+ }
+}
+
+func (z *ioDecReader) Read(p []byte) (n int, err error) {
+ if len(p) == 0 {
+ return
+ }
var firstByte bool
if z.ls == 1 {
z.ls = 2
@@ -200,8 +604,8 @@ func (z *ioDecByteScanner) Read(p []byte) (n int, err error) {
return
}
-func (z *ioDecByteScanner) ReadByte() (c byte, err error) {
- n, err := z.Read(z.b[:])
+func (z *ioDecReader) ReadByte() (c byte, err error) {
+ n, err := z.Read(z.b[:1])
if n == 1 {
c = z.b[0]
if err == io.EOF {
@@ -211,30 +615,20 @@ func (z *ioDecByteScanner) ReadByte() (c byte, err error) {
return
}
-func (z *ioDecByteScanner) UnreadByte() (err error) {
- x := z.ls
- if x == 0 {
- err = errors.New("cannot unread - nothing has been read")
- } else if x == 1 {
- err = errors.New("cannot unread - last byte has not been read")
- } else if x == 2 {
+func (z *ioDecReader) UnreadByte() (err error) {
+ switch z.ls {
+ case 2:
z.ls = 1
+ case 0:
+ err = decUnreadByteNothingToReadErr
+ case 1:
+ err = decUnreadByteLastByteNotReadErr
+ default:
+ err = decUnreadByteUnknownErr
}
return
}
-// ioDecReader is a decReader that reads off an io.Reader
-type ioDecReader struct {
- br decReaderByteScanner
- // temp byte array re-used internally for efficiency during read.
- // shares buffer with Decoder, so we keep size of struct within 8 words.
- x *[scratchByteArrayLen]byte
- bs ioDecByteScanner
- n int // num read
- tr []byte // tracking bytes read
- trb bool
-}
-
func (z *ioDecReader) numread() int {
return z.n
}
@@ -248,7 +642,7 @@ func (z *ioDecReader) readx(n int) (bs []byte) {
} else {
bs = make([]byte, n)
}
- if _, err := io.ReadAtLeast(z.br, bs, n); err != nil {
+ if _, err := decReadFull(z.rr, bs); err != nil {
panic(err)
}
z.n += len(bs)
@@ -259,31 +653,18 @@ func (z *ioDecReader) readx(n int) (bs []byte) {
}
func (z *ioDecReader) readb(bs []byte) {
- if len(bs) == 0 {
- return
- }
- n, err := io.ReadAtLeast(z.br, bs, len(bs))
- z.n += n
- if err != nil {
+ // if len(bs) == 0 {
+ // return
+ // }
+ if _, err := decReadFull(z.rr, bs); err != nil {
panic(err)
}
+ z.n += len(bs)
if z.trb {
z.tr = append(z.tr, bs...)
}
}
-func (z *ioDecReader) readn1() (b uint8) {
- b, err := z.br.ReadByte()
- if err != nil {
- panic(err)
- }
- z.n++
- if z.trb {
- z.tr = append(z.tr, b)
- }
- return b
-}
-
func (z *ioDecReader) readn1eof() (b uint8, eof bool) {
b, err := z.br.ReadByte()
if err == nil {
@@ -299,6 +680,72 @@ func (z *ioDecReader) readn1eof() (b uint8, eof bool) {
return
}
+func (z *ioDecReader) readn1() (b uint8) {
+ var err error
+ if b, err = z.br.ReadByte(); err == nil {
+ z.n++
+ if z.trb {
+ z.tr = append(z.tr, b)
+ }
+ return
+ }
+ panic(err)
+}
+
+func (z *ioDecReader) readn3() (b1, b2, b3 uint8) {
+ z.readb(z.b[:3])
+ return z.b[0], z.b[1], z.b[2]
+}
+
+func (z *ioDecReader) readn4() (b1, b2, b3, b4 uint8) {
+ z.readb(z.b[:4])
+ return z.b[0], z.b[1], z.b[2], z.b[3]
+}
+
+func (z *ioDecReader) skip(accept *bitset256) (token byte) {
+ for {
+ var eof bool
+ token, eof = z.readn1eof()
+ if eof {
+ return
+ }
+ if accept.isset(token) {
+ continue
+ }
+ return
+ }
+}
+
+func (z *ioDecReader) readTo(in []byte, accept *bitset256) (out []byte) {
+ out = in
+ for {
+ token, eof := z.readn1eof()
+ if eof {
+ return
+ }
+ if accept.isset(token) {
+ out = append(out, token)
+ } else {
+ z.unreadn1()
+ return
+ }
+ }
+}
+
+func (z *ioDecReader) readUntil(in []byte, stop byte) (out []byte) {
+ out = in
+ for {
+ token, eof := z.readn1eof()
+ if eof {
+ panic(io.EOF)
+ }
+ out = append(out, token)
+ if token == stop {
+ return
+ }
+ }
+}
+
func (z *ioDecReader) unreadn1() {
err := z.br.UnreadByte()
if err != nil {
@@ -375,6 +822,10 @@ func (z *bytesDecReader) readx(n int) (bs []byte) {
return
}
+func (z *bytesDecReader) readb(bs []byte) {
+ copy(bs, z.readx(len(bs)))
+}
+
func (z *bytesDecReader) readn1() (v uint8) {
if z.a == 0 {
panic(io.EOF)
@@ -385,19 +836,94 @@ func (z *bytesDecReader) readn1() (v uint8) {
return
}
-func (z *bytesDecReader) readn1eof() (v uint8, eof bool) {
+func (z *bytesDecReader) readn3() (b1, b2, b3 uint8) {
+ if 3 > z.a {
+ panic(io.ErrUnexpectedEOF)
+ }
+ b3 = z.b[z.c+2]
+ b2 = z.b[z.c+1]
+ b1 = z.b[z.c]
+ z.c += 3
+ z.a -= 3
+ return
+}
+
+func (z *bytesDecReader) readn4() (b1, b2, b3, b4 uint8) {
+ if 4 > z.a {
+ panic(io.ErrUnexpectedEOF)
+ }
+ b4 = z.b[z.c+3]
+ b3 = z.b[z.c+2]
+ b2 = z.b[z.c+1]
+ b1 = z.b[z.c]
+ z.c += 4
+ z.a -= 4
+ return
+}
+
+// func (z *bytesDecReader) readn1eof() (v uint8, eof bool) {
+// if z.a == 0 {
+// eof = true
+// return
+// }
+// v = z.b[z.c]
+// z.c++
+// z.a--
+// return
+// }
+
+func (z *bytesDecReader) skip(accept *bitset256) (token byte) {
if z.a == 0 {
- eof = true
return
}
- v = z.b[z.c]
- z.c++
- z.a--
+ blen := len(z.b)
+ for i := z.c; i < blen; i++ {
+ if !accept.isset(z.b[i]) {
+ token = z.b[i]
+ i++
+ z.a -= (i - z.c)
+ z.c = i
+ return
+ }
+ }
+ z.a, z.c = 0, blen
return
}
-func (z *bytesDecReader) readb(bs []byte) {
- copy(bs, z.readx(len(bs)))
+func (z *bytesDecReader) readTo(_ []byte, accept *bitset256) (out []byte) {
+ if z.a == 0 {
+ return
+ }
+ blen := len(z.b)
+ for i := z.c; i < blen; i++ {
+ if !accept.isset(z.b[i]) {
+ out = z.b[z.c:i]
+ z.a -= (i - z.c)
+ z.c = i
+ return
+ }
+ }
+ out = z.b[z.c:]
+ z.a, z.c = 0, blen
+ return
+}
+
+func (z *bytesDecReader) readUntil(_ []byte, stop byte) (out []byte) {
+ if z.a == 0 {
+ panic(io.EOF)
+ }
+ blen := len(z.b)
+ for i := z.c; i < blen; i++ {
+ if z.b[i] == stop {
+ i++
+ out = z.b[z.c:i]
+ z.a -= (i - z.c)
+ z.c = i
+ return
+ }
+ }
+ z.a, z.c = 0, blen
+ panic(io.EOF)
}
func (z *bytesDecReader) track() {
@@ -408,40 +934,25 @@ func (z *bytesDecReader) stopTrack() (bs []byte) {
return z.b[z.t:z.c]
}
-// ------------------------------------
-
-type decFnInfo struct {
- d *Decoder
- ti *typeInfo
- xfFn Ext
- xfTag uint64
- seq seqType
-}
-
// ----------------------------------------
-type decFn struct {
- i decFnInfo
- f func(*decFnInfo, reflect.Value)
+func (d *Decoder) builtin(f *codecFnInfo, rv reflect.Value) {
+ d.d.DecodeBuiltin(f.ti.rtid, rv2i(rv))
}
-func (f *decFnInfo) builtin(rv reflect.Value) {
- f.d.d.DecodeBuiltin(f.ti.rtid, rv.Addr().Interface())
+func (d *Decoder) rawExt(f *codecFnInfo, rv reflect.Value) {
+ d.d.DecodeExt(rv2i(rv), 0, nil)
}
-func (f *decFnInfo) rawExt(rv reflect.Value) {
- f.d.d.DecodeExt(rv.Addr().Interface(), 0, nil)
+func (d *Decoder) ext(f *codecFnInfo, rv reflect.Value) {
+ d.d.DecodeExt(rv2i(rv), f.xfTag, f.xfFn)
}
-func (f *decFnInfo) ext(rv reflect.Value) {
- f.d.d.DecodeExt(rv.Addr().Interface(), f.xfTag, f.xfFn)
-}
-
-func (f *decFnInfo) getValueForUnmarshalInterface(rv reflect.Value, indir int8) (v interface{}) {
+func (d *Decoder) getValueForUnmarshalInterface(rv reflect.Value, indir int8) (v interface{}) {
if indir == -1 {
- v = rv.Addr().Interface()
+ v = rv2i(rv.Addr())
} else if indir == 0 {
- v = rv.Interface()
+ v = rv2i(rv)
} else {
for j := int8(0); j < indir; j++ {
if rv.IsNil() {
@@ -449,122 +960,53 @@ func (f *decFnInfo) getValueForUnmarshalInterface(rv reflect.Value, indir int8)
}
rv = rv.Elem()
}
- v = rv.Interface()
+ v = rv2i(rv)
}
return
}
-func (f *decFnInfo) selferUnmarshal(rv reflect.Value) {
- f.getValueForUnmarshalInterface(rv, f.ti.csIndir).(Selfer).CodecDecodeSelf(f.d)
+func (d *Decoder) selferUnmarshal(f *codecFnInfo, rv reflect.Value) {
+ d.getValueForUnmarshalInterface(rv, f.ti.csIndir).(Selfer).CodecDecodeSelf(d)
}
-func (f *decFnInfo) binaryUnmarshal(rv reflect.Value) {
- bm := f.getValueForUnmarshalInterface(rv, f.ti.bunmIndir).(encoding.BinaryUnmarshaler)
- xbs := f.d.d.DecodeBytes(nil, false, true)
+func (d *Decoder) binaryUnmarshal(f *codecFnInfo, rv reflect.Value) {
+ bm := d.getValueForUnmarshalInterface(rv, f.ti.bunmIndir).(encoding.BinaryUnmarshaler)
+ xbs := d.d.DecodeBytes(nil, true)
if fnerr := bm.UnmarshalBinary(xbs); fnerr != nil {
panic(fnerr)
}
}
-func (f *decFnInfo) textUnmarshal(rv reflect.Value) {
- tm := f.getValueForUnmarshalInterface(rv, f.ti.tunmIndir).(encoding.TextUnmarshaler)
- fnerr := tm.UnmarshalText(f.d.d.DecodeBytes(f.d.b[:], true, true))
+func (d *Decoder) textUnmarshal(f *codecFnInfo, rv reflect.Value) {
+ tm := d.getValueForUnmarshalInterface(rv, f.ti.tunmIndir).(encoding.TextUnmarshaler)
+ fnerr := tm.UnmarshalText(d.d.DecodeStringAsBytes())
if fnerr != nil {
panic(fnerr)
}
}
-func (f *decFnInfo) jsonUnmarshal(rv reflect.Value) {
- tm := f.getValueForUnmarshalInterface(rv, f.ti.junmIndir).(jsonUnmarshaler)
- // bs := f.d.d.DecodeBytes(f.d.b[:], true, true)
+func (d *Decoder) jsonUnmarshal(f *codecFnInfo, rv reflect.Value) {
+ tm := d.getValueForUnmarshalInterface(rv, f.ti.junmIndir).(jsonUnmarshaler)
+ // bs := d.d.DecodeBytes(d.b[:], true, true)
// grab the bytes to be read, as UnmarshalJSON needs the full JSON so as to unmarshal it itself.
- fnerr := tm.UnmarshalJSON(f.d.nextValueBytes())
+ fnerr := tm.UnmarshalJSON(d.nextValueBytes())
if fnerr != nil {
panic(fnerr)
}
}
-func (f *decFnInfo) kErr(rv reflect.Value) {
- f.d.errorf("no decoding function defined for kind %v", rv.Kind())
-}
-
-func (f *decFnInfo) kString(rv reflect.Value) {
- rv.SetString(f.d.d.DecodeString())
-}
-
-func (f *decFnInfo) kBool(rv reflect.Value) {
- rv.SetBool(f.d.d.DecodeBool())
-}
-
-func (f *decFnInfo) kInt(rv reflect.Value) {
- rv.SetInt(f.d.d.DecodeInt(intBitsize))
+func (d *Decoder) kErr(f *codecFnInfo, rv reflect.Value) {
+ d.errorf("no decoding function defined for kind %v", rv.Kind())
}
-func (f *decFnInfo) kInt64(rv reflect.Value) {
- rv.SetInt(f.d.d.DecodeInt(64))
-}
-
-func (f *decFnInfo) kInt32(rv reflect.Value) {
- rv.SetInt(f.d.d.DecodeInt(32))
-}
-
-func (f *decFnInfo) kInt8(rv reflect.Value) {
- rv.SetInt(f.d.d.DecodeInt(8))
-}
-
-func (f *decFnInfo) kInt16(rv reflect.Value) {
- rv.SetInt(f.d.d.DecodeInt(16))
-}
-
-func (f *decFnInfo) kFloat32(rv reflect.Value) {
- rv.SetFloat(f.d.d.DecodeFloat(true))
-}
-
-func (f *decFnInfo) kFloat64(rv reflect.Value) {
- rv.SetFloat(f.d.d.DecodeFloat(false))
-}
-
-func (f *decFnInfo) kUint8(rv reflect.Value) {
- rv.SetUint(f.d.d.DecodeUint(8))
-}
-
-func (f *decFnInfo) kUint64(rv reflect.Value) {
- rv.SetUint(f.d.d.DecodeUint(64))
-}
-
-func (f *decFnInfo) kUint(rv reflect.Value) {
- rv.SetUint(f.d.d.DecodeUint(uintBitsize))
-}
-
-func (f *decFnInfo) kUintptr(rv reflect.Value) {
- rv.SetUint(f.d.d.DecodeUint(uintBitsize))
-}
-
-func (f *decFnInfo) kUint32(rv reflect.Value) {
- rv.SetUint(f.d.d.DecodeUint(32))
-}
-
-func (f *decFnInfo) kUint16(rv reflect.Value) {
- rv.SetUint(f.d.d.DecodeUint(16))
-}
-
-// func (f *decFnInfo) kPtr(rv reflect.Value) {
-// debugf(">>>>>>> ??? decode kPtr called - shouldn't get called")
-// if rv.IsNil() {
-// rv.Set(reflect.New(rv.Type().Elem()))
-// }
-// f.d.decodeValue(rv.Elem())
-// }
-
// var kIntfCtr uint64
-func (f *decFnInfo) kInterfaceNaked() (rvn reflect.Value) {
+func (d *Decoder) kInterfaceNaked(f *codecFnInfo) (rvn reflect.Value) {
// nil interface:
// use some hieristics to decode it appropriately
// based on the detected next value in the stream.
- d := f.d
+ n := d.naked()
d.d.DecodeNaked()
- n := &d.n
if n.v == valueTypeNil {
return
}
@@ -577,261 +1019,277 @@ func (f *decFnInfo) kInterfaceNaked() (rvn reflect.Value) {
// var useRvn bool
switch n.v {
case valueTypeMap:
- // if d.h.MapType == nil || d.h.MapType == mapIntfIntfTyp {
- // } else if d.h.MapType == mapStrIntfTyp { // for json performance
- // }
if d.mtid == 0 || d.mtid == mapIntfIntfTypId {
- l := len(n.ms)
- n.ms = append(n.ms, nil)
- var v2 interface{} = &n.ms[l]
- d.decode(v2)
- rvn = reflect.ValueOf(v2).Elem()
- n.ms = n.ms[:l]
+ if n.lm < arrayCacheLen {
+ n.ma[n.lm] = nil
+ rvn = n.rr[decNakedMapIntfIntfIdx*arrayCacheLen+n.lm]
+ n.lm++
+ d.decode(&n.ma[n.lm-1])
+ n.lm--
+ } else {
+ var v2 map[interface{}]interface{}
+ d.decode(&v2)
+ rvn = reflect.ValueOf(&v2).Elem()
+ }
} else if d.mtid == mapStrIntfTypId { // for json performance
- l := len(n.ns)
- n.ns = append(n.ns, nil)
- var v2 interface{} = &n.ns[l]
- d.decode(v2)
- rvn = reflect.ValueOf(v2).Elem()
- n.ns = n.ns[:l]
+ if n.ln < arrayCacheLen {
+ n.na[n.ln] = nil
+ rvn = n.rr[decNakedMapStrIntfIdx*arrayCacheLen+n.ln]
+ n.ln++
+ d.decode(&n.na[n.ln-1])
+ n.ln--
+ } else {
+ var v2 map[string]interface{}
+ d.decode(&v2)
+ rvn = reflect.ValueOf(&v2).Elem()
+ }
} else {
- rvn = reflect.New(d.h.MapType).Elem()
- d.decodeValue(rvn, nil)
+ rvn = reflect.New(d.h.MapType)
+ if useLookupRecognizedTypes && d.mtr { // isRecognizedRtid(d.mtid) {
+ d.decode(rv2i(rvn))
+ rvn = rvn.Elem()
+ } else {
+ rvn = rvn.Elem()
+ d.decodeValue(rvn, nil, false, true)
+ }
}
case valueTypeArray:
- // if d.h.SliceType == nil || d.h.SliceType == intfSliceTyp {
if d.stid == 0 || d.stid == intfSliceTypId {
- l := len(n.ss)
- n.ss = append(n.ss, nil)
- var v2 interface{} = &n.ss[l]
- d.decode(v2)
- rvn = reflect.ValueOf(v2).Elem()
- n.ss = n.ss[:l]
+ if n.ls < arrayCacheLen {
+ n.sa[n.ls] = nil
+ rvn = n.rr[decNakedSliceIntfIdx*arrayCacheLen+n.ls]
+ n.ls++
+ d.decode(&n.sa[n.ls-1])
+ n.ls--
+ } else {
+ var v2 []interface{}
+ d.decode(&v2)
+ rvn = reflect.ValueOf(&v2).Elem()
+ }
+ if reflectArrayOfSupported && d.stid == 0 && d.h.PreferArrayOverSlice {
+ rvn2 := reflect.New(reflectArrayOf(rvn.Len(), intfTyp)).Elem()
+ reflect.Copy(rvn2, rvn)
+ rvn = rvn2
+ }
} else {
- rvn = reflect.New(d.h.SliceType).Elem()
- d.decodeValue(rvn, nil)
+ rvn = reflect.New(d.h.SliceType)
+ if useLookupRecognizedTypes && d.str { // isRecognizedRtid(d.stid) {
+ d.decode(rv2i(rvn))
+ rvn = rvn.Elem()
+ } else {
+ rvn = rvn.Elem()
+ d.decodeValue(rvn, nil, false, true)
+ }
}
case valueTypeExt:
var v interface{}
tag, bytes := n.u, n.l // calling decode below might taint the values
if bytes == nil {
- l := len(n.is)
- n.is = append(n.is, nil)
- v2 := &n.is[l]
- d.decode(v2)
- v = *v2
- n.is = n.is[:l]
+ if n.li < arrayCacheLen {
+ n.ia[n.li] = nil
+ n.li++
+ d.decode(&n.ia[n.li-1])
+ // v = *(&n.ia[l])
+ n.li--
+ v = n.ia[n.li]
+ n.ia[n.li] = nil
+ } else {
+ d.decode(&v)
+ }
}
bfn := d.h.getExtForTag(tag)
if bfn == nil {
var re RawExt
re.Tag = tag
re.Data = detachZeroCopyBytes(d.bytes, nil, bytes)
- rvn = reflect.ValueOf(re)
+ re.Value = v
+ rvn = reflect.ValueOf(&re).Elem()
} else {
rvnA := reflect.New(bfn.rt)
- rvn = rvnA.Elem()
if bytes != nil {
- bfn.ext.ReadExt(rvnA.Interface(), bytes)
+ bfn.ext.ReadExt(rv2i(rvnA), bytes)
} else {
- bfn.ext.UpdateExt(rvnA.Interface(), v)
+ bfn.ext.UpdateExt(rv2i(rvnA), v)
}
+ rvn = rvnA.Elem()
}
case valueTypeNil:
// no-op
case valueTypeInt:
- rvn = reflect.ValueOf(&n.i).Elem()
+ rvn = n.rr[decNakedIntIdx] // d.np.get(&n.i)
case valueTypeUint:
- rvn = reflect.ValueOf(&n.u).Elem()
+ rvn = n.rr[decNakedUintIdx] // d.np.get(&n.u)
case valueTypeFloat:
- rvn = reflect.ValueOf(&n.f).Elem()
+ rvn = n.rr[decNakedFloatIdx] // d.np.get(&n.f)
case valueTypeBool:
- rvn = reflect.ValueOf(&n.b).Elem()
+ rvn = n.rr[decNakedBoolIdx] // d.np.get(&n.b)
case valueTypeString, valueTypeSymbol:
- rvn = reflect.ValueOf(&n.s).Elem()
+ rvn = n.rr[decNakedStringIdx] // d.np.get(&n.s)
case valueTypeBytes:
- rvn = reflect.ValueOf(&n.l).Elem()
+ rvn = n.rr[decNakedBytesIdx] // d.np.get(&n.l)
case valueTypeTimestamp:
- rvn = reflect.ValueOf(&n.t).Elem()
+ rvn = n.rr[decNakedTimeIdx] // d.np.get(&n.t)
default:
panic(fmt.Errorf("kInterfaceNaked: unexpected valueType: %d", n.v))
}
return
}
-func (f *decFnInfo) kInterface(rv reflect.Value) {
- // debugf("\t===> kInterface")
-
+func (d *Decoder) kInterface(f *codecFnInfo, rv reflect.Value) {
// Note:
// A consequence of how kInterface works, is that
// if an interface already contains something, we try
// to decode into what was there before.
// We do not replace with a generic value (as got from decodeNaked).
+ // every interface passed here MUST be settable.
var rvn reflect.Value
if rv.IsNil() {
- rvn = f.kInterfaceNaked()
- if rvn.IsValid() {
+ if rvn = d.kInterfaceNaked(f); rvn.IsValid() {
rv.Set(rvn)
}
- } else if f.d.h.InterfaceReset {
- rvn = f.kInterfaceNaked()
- if rvn.IsValid() {
+ return
+ }
+ if d.h.InterfaceReset {
+ if rvn = d.kInterfaceNaked(f); rvn.IsValid() {
rv.Set(rvn)
} else {
// reset to zero value based on current type in there.
rv.Set(reflect.Zero(rv.Elem().Type()))
}
- } else {
- rvn = rv.Elem()
- // Note: interface{} is settable, but underlying type may not be.
- // Consequently, we have to set the reflect.Value directly.
- // if underlying type is settable (e.g. ptr or interface),
- // we just decode into it.
- // Else we create a settable value, decode into it, and set on the interface.
- if rvn.CanSet() {
- f.d.decodeValue(rvn, nil)
- } else {
- rvn2 := reflect.New(rvn.Type()).Elem()
- rvn2.Set(rvn)
- f.d.decodeValue(rvn2, nil)
- rv.Set(rvn2)
- }
+ return
}
+
+ // now we have a non-nil interface value, meaning it contains a type
+ rvn = rv.Elem()
+ if d.d.TryDecodeAsNil() {
+ rv.Set(reflect.Zero(rvn.Type()))
+ return
+ }
+
+ // Note: interface{} is settable, but underlying type may not be.
+ // Consequently, we MAY have to create a decodable value out of the underlying value,
+ // decode into it, and reset the interface itself.
+ // fmt.Printf(">>>> kInterface: rvn type: %v, rv type: %v\n", rvn.Type(), rv.Type())
+
+ rvn2, canDecode := isDecodeable(rvn)
+ if canDecode {
+ d.decodeValue(rvn2, nil, true, true)
+ return
+ }
+
+ rvn2 = reflect.New(rvn.Type()).Elem()
+ rvn2.Set(rvn)
+ d.decodeValue(rvn2, nil, true, true)
+ rv.Set(rvn2)
}
-func (f *decFnInfo) kStruct(rv reflect.Value) {
+func (d *Decoder) kStruct(f *codecFnInfo, rv reflect.Value) {
+ // checking if recognized within kstruct is too expensive.
+ // only check where you can determine if valid outside the loop
+ // ie on homogenous collections: slices, arrays and maps.
+ //
+ // if true, we don't create too many decFn's.
+ // It's a delicate balance.
+ const checkRecognized bool = false // false: TODO
+
fti := f.ti
- d := f.d
dd := d.d
- cr := d.cr
+ elemsep := d.hh.hasElemSeparators()
+ sfn := structFieldNode{v: rv, update: true}
ctyp := dd.ContainerType()
if ctyp == valueTypeMap {
containerLen := dd.ReadMapStart()
if containerLen == 0 {
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return
}
tisfi := fti.sfi
hasLen := containerLen >= 0
- if hasLen {
- for j := 0; j < containerLen; j++ {
- // rvkencname := dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- rvkencname := stringView(dd.DecodeBytes(f.d.b[:], true, true))
- // rvksi := ti.getForEncName(rvkencname)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if k := fti.indexForEncName(rvkencname); k > -1 {
- si := tisfi[k]
- if dd.TryDecodeAsNil() {
- si.setToZeroValue(rv)
- } else {
- d.decodeValue(si.field(rv, true), nil)
- }
- } else {
- d.structFieldNotFound(-1, rvkencname)
- }
+
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ // rvkencname := dd.DecodeString()
+ if elemsep {
+ dd.ReadMapElemKey()
}
- } else {
- for j := 0; !dd.CheckBreak(); j++ {
- // rvkencname := dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- rvkencname := stringView(dd.DecodeBytes(f.d.b[:], true, true))
- // rvksi := ti.getForEncName(rvkencname)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if k := fti.indexForEncName(rvkencname); k > -1 {
- si := tisfi[k]
- if dd.TryDecodeAsNil() {
- si.setToZeroValue(rv)
- } else {
- d.decodeValue(si.field(rv, true), nil)
- }
+ rvkencnameB := dd.DecodeStringAsBytes()
+ rvkencname := stringView(rvkencnameB)
+ // rvksi := ti.getForEncName(rvkencname)
+ if elemsep {
+ dd.ReadMapElemValue()
+ }
+ if k := fti.indexForEncName(rvkencname); k > -1 {
+ si := tisfi[k]
+ if dd.TryDecodeAsNil() {
+ si.setToZeroValue(rv)
} else {
- d.structFieldNotFound(-1, rvkencname)
+ d.decodeValue(sfn.field(si), nil, checkRecognized, true)
}
+ } else {
+ d.structFieldNotFound(-1, rvkencname)
}
+ // keepAlive4StringView(rvkencnameB) // maintain ref 4 stringView // not needed, as reference is outside loop
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
} else if ctyp == valueTypeArray {
containerLen := dd.ReadArrayStart()
if containerLen == 0 {
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ dd.ReadArrayEnd()
return
}
// Not much gain from doing it two ways for array.
// Arrays are not used as much for structs.
hasLen := containerLen >= 0
for j, si := range fti.sfip {
- if hasLen {
- if j == containerLen {
- break
- }
- } else if dd.CheckBreak() {
+ if (hasLen && j == containerLen) || (!hasLen && dd.CheckBreak()) {
break
}
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ if elemsep {
+ dd.ReadArrayElem()
}
if dd.TryDecodeAsNil() {
si.setToZeroValue(rv)
} else {
- d.decodeValue(si.field(rv, true), nil)
+ d.decodeValue(sfn.field(si), nil, checkRecognized, true)
}
}
if containerLen > len(fti.sfip) {
// read remaining values and throw away
for j := len(fti.sfip); j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ if elemsep {
+ dd.ReadArrayElem()
}
d.structFieldNotFound(j, "")
}
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ dd.ReadArrayEnd()
} else {
- f.d.error(onlyMapOrArrayCanDecodeIntoStructErr)
+ d.error(onlyMapOrArrayCanDecodeIntoStructErr)
return
}
}
-func (f *decFnInfo) kSlice(rv reflect.Value) {
+func (d *Decoder) kSlice(f *codecFnInfo, rv reflect.Value) {
// A slice can be set from a map or array in stream.
// This way, the order can be kept (as order is lost with map).
ti := f.ti
- d := f.d
dd := d.d
rtelem0 := ti.rt.Elem()
ctyp := dd.ContainerType()
if ctyp == valueTypeBytes || ctyp == valueTypeString {
// you can only decode bytes or string in the stream into a slice or array of bytes
if !(ti.rtid == uint8SliceTypId || rtelem0.Kind() == reflect.Uint8) {
- f.d.errorf("bytes or string in the stream must be decoded into a slice or array of bytes, not %v", ti.rt)
+ d.errorf("bytes or string in the stream must be decoded into a slice or array of bytes, not %v", ti.rt)
}
if f.seq == seqTypeChan {
- bs2 := dd.DecodeBytes(nil, false, true)
- ch := rv.Interface().(chan<- byte)
+ bs2 := dd.DecodeBytes(nil, true)
+ ch := rv2i(rv).(chan<- byte)
for _, b := range bs2 {
ch <- b
}
} else {
rvbs := rv.Bytes()
- bs2 := dd.DecodeBytes(rvbs, false, false)
+ bs2 := dd.DecodeBytes(rvbs, false)
if rvbs == nil && bs2 != nil || rvbs != nil && bs2 == nil || len(bs2) != len(rvbs) {
if rv.CanSet() {
rv.SetBytes(bs2)
@@ -847,155 +1305,182 @@ func (f *decFnInfo) kSlice(rv reflect.Value) {
slh, containerLenS := d.decSliceHelperStart() // only expects valueType(Array|Map)
- // // an array can never return a nil slice. so no need to check f.array here.
+ // an array can never return a nil slice. so no need to check f.array here.
if containerLenS == 0 {
- if f.seq == seqTypeSlice {
- if rv.IsNil() {
- rv.Set(reflect.MakeSlice(ti.rt, 0, 0))
- } else {
- rv.SetLen(0)
- }
- } else if f.seq == seqTypeChan {
- if rv.IsNil() {
- rv.Set(reflect.MakeChan(ti.rt, 0))
+ if rv.CanSet() {
+ if f.seq == seqTypeSlice {
+ if rv.IsNil() {
+ rv.Set(reflect.MakeSlice(ti.rt, 0, 0))
+ } else {
+ rv.SetLen(0)
+ }
+ } else if f.seq == seqTypeChan {
+ if rv.IsNil() {
+ rv.Set(reflect.MakeChan(ti.rt, 0))
+ }
}
}
slh.End()
return
}
+ rtelem0Size := int(rtelem0.Size())
+ rtElem0Kind := rtelem0.Kind()
+ rtElem0Id := rt2id(rtelem0)
+ rtelem0Mut := !isImmutableKind(rtElem0Kind)
rtelem := rtelem0
- for rtelem.Kind() == reflect.Ptr {
+ rtelemkind := rtelem.Kind()
+ for rtelemkind == reflect.Ptr {
rtelem = rtelem.Elem()
+ rtelemkind = rtelem.Kind()
}
- fn := d.getDecFn(rtelem, true, true)
+
+ var fn *codecFn
var rv0, rv9 reflect.Value
rv0 = rv
rvChanged := false
- // for j := 0; j < containerLenS; j++ {
- var rvlen int
- if containerLenS > 0 { // hasLen
- if f.seq == seqTypeChan {
- if rv.IsNil() {
- rvlen, _ = decInferLen(containerLenS, f.d.h.MaxInitLen, int(rtelem0.Size()))
- rv.Set(reflect.MakeChan(ti.rt, rvlen))
- }
- // handle chan specially:
- for j := 0; j < containerLenS; j++ {
- rv9 = reflect.New(rtelem0).Elem()
- slh.ElemContainerState(j)
- d.decodeValue(rv9, fn)
- rv.Send(rv9)
- }
- } else { // slice or array
- var truncated bool // says len of sequence is not same as expected number of elements
- numToRead := containerLenS // if truncated, reset numToRead
-
- rvcap := rv.Cap()
- rvlen = rv.Len()
- if containerLenS > rvcap {
- if f.seq == seqTypeArray {
- d.arrayCannotExpand(rvlen, containerLenS)
+ rvlen := rv.Len()
+ rvcap := rv.Cap()
+ hasLen := containerLenS > 0
+ if hasLen && f.seq == seqTypeSlice {
+ if containerLenS > rvcap {
+ oldRvlenGtZero := rvlen > 0
+ rvlen = decInferLen(containerLenS, d.h.MaxInitLen, int(rtelem0.Size()))
+ if rvlen <= rvcap {
+ if rv.CanSet() {
+ rv.SetLen(rvlen)
} else {
- oldRvlenGtZero := rvlen > 0
- rvlen, truncated = decInferLen(containerLenS, f.d.h.MaxInitLen, int(rtelem0.Size()))
- if truncated {
- if rvlen <= rvcap {
- rv.SetLen(rvlen)
- } else {
- rv = reflect.MakeSlice(ti.rt, rvlen, rvlen)
- rvChanged = true
- }
- } else {
- rv = reflect.MakeSlice(ti.rt, rvlen, rvlen)
- rvChanged = true
- }
- if rvChanged && oldRvlenGtZero && !isImmutableKind(rtelem0.Kind()) {
- reflect.Copy(rv, rv0) // only copy up to length NOT cap i.e. rv0.Slice(0, rvcap)
- }
- rvcap = rvlen
- }
- numToRead = rvlen
- } else if containerLenS != rvlen {
- if f.seq == seqTypeSlice {
- rv.SetLen(containerLenS)
- rvlen = containerLenS
+ rv = rv.Slice(0, rvlen)
+ rvChanged = true
}
+ } else {
+ rv = reflect.MakeSlice(ti.rt, rvlen, rvlen)
+ rvcap = rvlen
+ rvChanged = true
}
- j := 0
- // we read up to the numToRead
- for ; j < numToRead; j++ {
- slh.ElemContainerState(j)
- d.decodeValue(rv.Index(j), fn)
+ if rvChanged && oldRvlenGtZero && !isImmutableKind(rtelem0.Kind()) {
+ reflect.Copy(rv, rv0) // only copy up to length NOT cap i.e. rv0.Slice(0, rvcap)
}
+ } else if containerLenS != rvlen {
+ rvlen = containerLenS
+ if rv.CanSet() {
+ rv.SetLen(rvlen)
+ } else {
+ rv = rv.Slice(0, rvlen)
+ rvChanged = true
+ }
+ }
+ }
- // if slice, expand and read up to containerLenS (or EOF) iff truncated
- // if array, swallow all the rest.
+ var recognizedRtid, recognizedRtidPtr bool
+ if useLookupRecognizedTypes {
+ recognizedRtid = isRecognizedRtid(rtElem0Id)
+ recognizedRtidPtr = isRecognizedRtidPtr(rtElem0Id)
+ }
- if f.seq == seqTypeArray {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
- }
- } else if truncated { // slice was truncated, as chan NOT in this block
- for ; j < containerLenS; j++ {
- rv = expandSliceValue(rv, 1)
- rv9 = rv.Index(j)
- if resetSliceElemToZeroValue {
- rv9.Set(reflect.Zero(rtelem0))
- }
- slh.ElemContainerState(j)
- d.decodeValue(rv9, fn)
- }
+ // consider creating new element once, and just decoding into it.
+ var rtelem0Zero reflect.Value
+ var rtelem0ZeroValid bool
+ var decodeAsNil bool
+ var j int
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && (f.seq == seqTypeSlice || f.seq == seqTypeChan) && rv.IsNil() {
+ if hasLen {
+ rvlen = decInferLen(containerLenS, d.h.MaxInitLen, rtelem0Size)
+ } else {
+ rvlen = 8
+ }
+ if f.seq == seqTypeSlice {
+ rv = reflect.MakeSlice(ti.rt, rvlen, rvlen)
+ rvChanged = true
+ } else if f.seq == seqTypeChan {
+ rv.Set(reflect.MakeChan(ti.rt, rvlen))
}
}
- } else {
- rvlen = rv.Len()
- j := 0
- for ; !dd.CheckBreak(); j++ {
- if f.seq == seqTypeChan {
- slh.ElemContainerState(j)
+ slh.ElemContainerState(j)
+ decodeAsNil = dd.TryDecodeAsNil()
+ if f.seq == seqTypeChan {
+ if decodeAsNil {
+ rv.Send(reflect.Zero(rtelem0))
+ continue
+ }
+ if rtelem0Mut || !rv9.IsValid() { // || (rtElem0Kind == reflect.Ptr && rv9.IsNil()) {
rv9 = reflect.New(rtelem0).Elem()
- d.decodeValue(rv9, fn)
- rv.Send(rv9)
+ }
+ if useLookupRecognizedTypes && (recognizedRtid || recognizedRtidPtr) {
+ d.decode(rv2i(rv9.Addr()))
} else {
- // if indefinite, etc, then expand the slice if necessary
- var decodeIntoBlank bool
- if j >= rvlen {
- if f.seq == seqTypeArray {
- d.arrayCannotExpand(rvlen, j+1)
- decodeIntoBlank = true
- } else { // if f.seq == seqTypeSlice
- // rv = reflect.Append(rv, reflect.Zero(rtelem0)) // uses append logic, plus varargs
- rv = expandSliceValue(rv, 1)
- rv9 = rv.Index(j)
- // rv.Index(rv.Len() - 1).Set(reflect.Zero(rtelem0))
- if resetSliceElemToZeroValue {
- rv9.Set(reflect.Zero(rtelem0))
- }
- rvlen++
- rvChanged = true
+ if fn == nil {
+ fn = d.cf.get(rtelem, true, true)
+ }
+ d.decodeValue(rv9, fn, false, true)
+ }
+ rv.Send(rv9)
+ } else {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= rvlen {
+ if f.seq == seqTypeArray {
+ d.arrayCannotExpand(rvlen, j+1)
+ decodeIntoBlank = true
+ } else { // if f.seq == seqTypeSlice
+ // rv = reflect.Append(rv, reflect.Zero(rtelem0)) // uses append logic, plus varargs
+ var rvcap2 int
+ rv9, rvcap2, rvChanged = decExpandSliceRV(rv, ti.rt, rtelem0Size, 1, rvlen, rvcap)
+ rvlen++
+ if rvChanged {
+ rv = rv9
+ rvcap = rvcap2
}
- } else { // slice or array
- rv9 = rv.Index(j)
}
- slh.ElemContainerState(j)
- if decodeIntoBlank {
+ }
+ if decodeIntoBlank {
+ if !decodeAsNil {
d.swallow()
- } else { // seqTypeSlice
- d.decodeValue(rv9, fn)
+ }
+ } else {
+ rv9 = rv.Index(j)
+ if d.h.SliceElementReset || decodeAsNil {
+ if !rtelem0ZeroValid {
+ rtelem0ZeroValid = true
+ rtelem0Zero = reflect.Zero(rtelem0)
+ }
+ rv9.Set(rtelem0Zero)
+ }
+ if decodeAsNil {
+ continue
+ }
+
+ if useLookupRecognizedTypes && recognizedRtid {
+ d.decode(rv2i(rv9.Addr()))
+ } else if useLookupRecognizedTypes && recognizedRtidPtr { // && !rv9.IsNil() {
+ if rv9.IsNil() {
+ rv9.Set(reflect.New(rtelem))
+ }
+ d.decode(rv2i(rv9))
+ } else {
+ if fn == nil {
+ fn = d.cf.get(rtelem, true, true)
+ }
+ d.decodeValue(rv9, fn, false, true)
}
}
}
- if f.seq == seqTypeSlice {
- if j < rvlen {
+ }
+ if f.seq == seqTypeSlice {
+ if j < rvlen {
+ if rv.CanSet() {
rv.SetLen(j)
- } else if j == 0 && rv.IsNil() {
- rv = reflect.MakeSlice(ti.rt, 0, 0)
+ } else {
+ rv = rv.Slice(0, j)
rvChanged = true
}
+ rvlen = j
+ } else if j == 0 && rv.IsNil() {
+ rv = reflect.MakeSlice(ti.rt, 0, 0)
+ rvChanged = true
}
}
slh.End()
@@ -1005,41 +1490,48 @@ func (f *decFnInfo) kSlice(rv reflect.Value) {
}
}
-func (f *decFnInfo) kArray(rv reflect.Value) {
- // f.d.decodeValue(rv.Slice(0, rv.Len()))
- f.kSlice(rv.Slice(0, rv.Len()))
-}
+// func (d *Decoder) kArray(f *codecFnInfo, rv reflect.Value) {
+// // d.decodeValueFn(rv.Slice(0, rv.Len()))
+// f.kSlice(rv.Slice(0, rv.Len()))
+// }
-func (f *decFnInfo) kMap(rv reflect.Value) {
- d := f.d
+func (d *Decoder) kMap(f *codecFnInfo, rv reflect.Value) {
dd := d.d
containerLen := dd.ReadMapStart()
- cr := d.cr
+ elemsep := d.hh.hasElemSeparators()
ti := f.ti
if rv.IsNil() {
- rv.Set(reflect.MakeMap(ti.rt))
+ rv.Set(makeMapReflect(ti.rt, containerLen))
}
if containerLen == 0 {
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return
}
ktype, vtype := ti.rt.Key(), ti.rt.Elem()
- ktypeId := reflect.ValueOf(ktype).Pointer()
+ ktypeId := rt2id(ktype)
+ vtypeId := rt2id(vtype)
vtypeKind := vtype.Kind()
- var keyFn, valFn *decFn
- var xtyp reflect.Type
- for xtyp = ktype; xtyp.Kind() == reflect.Ptr; xtyp = xtyp.Elem() {
+ var recognizedKtyp, recognizedVtyp, recognizedPtrKtyp, recognizedPtrVtyp bool
+ if useLookupRecognizedTypes {
+ recognizedKtyp = isRecognizedRtid(ktypeId)
+ recognizedVtyp = isRecognizedRtid(vtypeId)
+ recognizedPtrKtyp = isRecognizedRtidPtr(ktypeId)
+ recognizedPtrVtyp = isRecognizedRtidPtr(vtypeId)
}
- keyFn = d.getDecFn(xtyp, true, true)
- for xtyp = vtype; xtyp.Kind() == reflect.Ptr; xtyp = xtyp.Elem() {
+
+ var keyFn, valFn *codecFn
+ var ktypeLo, vtypeLo reflect.Type
+ for ktypeLo = ktype; ktypeLo.Kind() == reflect.Ptr; ktypeLo = ktypeLo.Elem() {
}
- valFn = d.getDecFn(xtyp, true, true)
+
+ for vtypeLo = vtype; vtypeLo.Kind() == reflect.Ptr; vtypeLo = vtypeLo.Elem() {
+ }
+
var mapGet, mapSet bool
- if !f.d.h.MapValueReset {
+ rvvImmut := isImmutableKind(vtypeKind)
+ if !d.h.MapValueReset {
// if pointer, mapGet = true
// if interface, mapGet = true if !DecodeNakedAlways (else false)
// if builtin, mapGet = false
@@ -1047,118 +1539,140 @@ func (f *decFnInfo) kMap(rv reflect.Value) {
if vtypeKind == reflect.Ptr {
mapGet = true
} else if vtypeKind == reflect.Interface {
- if !f.d.h.InterfaceReset {
+ if !d.h.InterfaceReset {
mapGet = true
}
- } else if !isImmutableKind(vtypeKind) {
+ } else if !rvvImmut {
mapGet = true
}
}
- var rvk, rvv, rvz reflect.Value
-
- // for j := 0; j < containerLen; j++ {
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- rvk = reflect.New(ktype).Elem()
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- d.decodeValue(rvk, keyFn)
-
- // special case if a byte array.
- if ktypeId == intfTypId {
- rvk = rvk.Elem()
- if rvk.Type() == uint8SliceTyp {
- rvk = reflect.ValueOf(d.string(rvk.Bytes()))
- }
- }
- mapSet = true // set to false if u do a get, and its a pointer, and exists
- if mapGet {
- rvv = rv.MapIndex(rvk)
- if rvv.IsValid() {
- if vtypeKind == reflect.Ptr {
- mapSet = false
- }
- } else {
- if rvz.IsValid() {
- rvz.Set(reflect.Zero(vtype))
- } else {
- rvz = reflect.New(vtype).Elem()
- }
- rvv = rvz
- }
- } else {
- if rvz.IsValid() {
- rvz.Set(reflect.Zero(vtype))
- } else {
- rvz = reflect.New(vtype).Elem()
- }
- rvv = rvz
+ var rvk, rvkp, rvv, rvz reflect.Value
+ rvkMut := !isImmutableKind(ktype.Kind()) // if ktype is immutable, then re-use the same rvk.
+ ktypeIsString := ktypeId == stringTypId
+ ktypeIsIntf := ktypeId == intfTypId
+ hasLen := containerLen > 0
+ var kstrbs []byte
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if elemsep {
+ dd.ReadMapElemKey()
+ }
+ // if a nil key, just ignore the mapped value and continue
+ if dd.TryDecodeAsNil() {
+ if elemsep {
+ dd.ReadMapElemValue()
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ d.swallow()
+ continue
+ }
+ if rvkMut || !rvkp.IsValid() {
+ rvkp = reflect.New(ktype)
+ rvk = rvkp.Elem()
+ }
+ if ktypeIsString {
+ kstrbs = dd.DecodeStringAsBytes()
+ rvk.SetString(stringView(kstrbs))
+ // NOTE: if doing an insert, you MUST use a real string (not stringview)
+ } else if useLookupRecognizedTypes && recognizedKtyp {
+ d.decode(rv2i(rvkp))
+ // rvk = rvkp.Elem() //TODO: remove, unnecessary
+ } else if useLookupRecognizedTypes && recognizedPtrKtyp {
+ if rvk.IsNil() {
+ rvk = reflect.New(ktypeLo)
}
- d.decodeValue(rvv, valFn)
- if mapSet {
- rv.SetMapIndex(rvk, rvv)
+ d.decode(rv2i(rvk))
+ } else {
+ if keyFn == nil {
+ keyFn = d.cf.get(ktypeLo, true, true)
}
+ d.decodeValue(rvk, keyFn, false, true)
}
- } else {
- for j := 0; !dd.CheckBreak(); j++ {
- rvk = reflect.New(ktype).Elem()
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ // special case if a byte array.
+ if ktypeIsIntf {
+ rvk = rvk.Elem()
+ if rvk.Type() == uint8SliceTyp {
+ rvk = reflect.ValueOf(d.string(rvk.Bytes()))
}
- d.decodeValue(rvk, keyFn)
+ }
- // special case if a byte array.
- if ktypeId == intfTypId {
- rvk = rvk.Elem()
- if rvk.Type() == uint8SliceTyp {
- rvk = reflect.ValueOf(d.string(rvk.Bytes()))
- }
+ if elemsep {
+ dd.ReadMapElemValue()
+ }
+
+ // Brittle, but OK per TryDecodeAsNil() contract.
+ // i.e. TryDecodeAsNil never shares slices with other decDriver procedures
+ if dd.TryDecodeAsNil() {
+ if ktypeIsString {
+ rvk.SetString(d.string(kstrbs))
}
- mapSet = true // set to false if u do a get, and its a pointer, and exists
- if mapGet {
- rvv = rv.MapIndex(rvk)
- if rvv.IsValid() {
- if vtypeKind == reflect.Ptr {
- mapSet = false
- }
- } else {
- if rvz.IsValid() {
- rvz.Set(reflect.Zero(vtype))
- } else {
- rvz = reflect.New(vtype).Elem()
- }
- rvv = rvz
- }
+ if d.h.DeleteOnNilMapValue {
+ rv.SetMapIndex(rvk, reflect.Value{})
} else {
- if rvz.IsValid() {
- rvz.Set(reflect.Zero(vtype))
+ rv.SetMapIndex(rvk, reflect.Zero(vtype))
+ }
+ continue
+ }
+
+ mapSet = true // set to false if u do a get, and its a non-nil pointer
+ if mapGet {
+ // mapGet true only in case where kind=Ptr|Interface or kind is otherwise mutable.
+ rvv = rv.MapIndex(rvk)
+ if !rvv.IsValid() {
+ rvv = reflect.New(vtype).Elem()
+ } else if vtypeKind == reflect.Ptr {
+ if rvv.IsNil() {
+ rvv = reflect.New(vtype).Elem()
} else {
- rvz = reflect.New(vtype).Elem()
+ mapSet = false
+ }
+ } else if vtypeKind == reflect.Interface {
+ // not addressable, and thus not settable.
+ // e MUST create a settable/addressable variant
+ rvv2 := reflect.New(rvv.Type()).Elem()
+ if !rvv.IsNil() {
+ rvv2.Set(rvv)
}
- rvv = rvz
+ rvv = rvv2
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ // else it is ~mutable, and we can just decode into it directly
+ } else if rvvImmut {
+ if !rvz.IsValid() {
+ rvz = reflect.New(vtype).Elem()
}
- d.decodeValue(rvv, valFn)
- if mapSet {
- rv.SetMapIndex(rvk, rvv)
+ rvv = rvz
+ } else {
+ rvv = reflect.New(vtype).Elem()
+ }
+
+ // We MUST be done with the stringview of the key, before decoding the value
+ // so that we don't bastardize the reused byte array.
+ if mapSet && ktypeIsString {
+ rvk.SetString(d.string(kstrbs))
+ }
+ if useLookupRecognizedTypes && recognizedVtyp && rvv.CanAddr() {
+ d.decode(rv2i(rvv.Addr()))
+ } else if useLookupRecognizedTypes && recognizedPtrVtyp {
+ if rvv.IsNil() {
+ rvv = reflect.New(vtypeLo)
+ mapSet = true
+ }
+ d.decode(rv2i(rvv))
+ } else {
+ if valFn == nil {
+ valFn = d.cf.get(vtypeLo, true, true)
}
+ d.decodeValue(rvv, valFn, false, true)
+ // d.decodeValueFn(rvv, valFn)
}
+ if mapSet {
+ rv.SetMapIndex(rvk, rvv)
+ }
+ // if ktypeIsString {
+ // // keepAlive4StringView(kstrbs) // not needed, as reference is outside loop
+ // }
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
-}
-type decRtidFn struct {
- rtid uintptr
- fn decFn
+ dd.ReadMapEnd()
}
// decNaked is used to keep track of the primitives decoded.
@@ -1169,7 +1683,7 @@ type decRtidFn struct {
// primitives are being decoded.
//
// maps and arrays are not handled by this mechanism.
-// However, RawExt is, and we accomodate for extensions that decode
+// However, RawExt is, and we accommodate for extensions that decode
// RawExt from DecodeNaked, but need to decode the value subsequently.
// kInterfaceNaked and swallow, which call DecodeNaked, handle this caveat.
//
@@ -1187,37 +1701,80 @@ type decNaked struct {
l []byte
s string
t time.Time
+
b bool
+
+ inited bool
+
v valueType
- // stacks for reducing allocation
- is []interface{}
- ms []map[interface{}]interface{}
- ns []map[string]interface{}
- ss [][]interface{}
- // rs []RawExt
+ li, lm, ln, ls int8
+ // array/stacks for reducing allocation
// keep arrays at the bottom? Chance is that they are not used much.
- ia [4]interface{}
- ma [4]map[interface{}]interface{}
- na [4]map[string]interface{}
- sa [4][]interface{}
+ ia [arrayCacheLen]interface{}
+ ma [arrayCacheLen]map[interface{}]interface{}
+ na [arrayCacheLen]map[string]interface{}
+ sa [arrayCacheLen][]interface{}
// ra [2]RawExt
+
+ rr [5 * arrayCacheLen]reflect.Value
}
-func (n *decNaked) reset() {
- if n.ss != nil {
- n.ss = n.ss[:0]
- }
- if n.is != nil {
- n.is = n.is[:0]
+const (
+ decNakedUintIdx = iota
+ decNakedIntIdx
+ decNakedFloatIdx
+ decNakedBytesIdx
+ decNakedStringIdx
+ decNakedTimeIdx
+ decNakedBoolIdx
+)
+const (
+ _ = iota // maps to the scalars above
+ decNakedIntfIdx
+ decNakedMapIntfIntfIdx
+ decNakedMapStrIntfIdx
+ decNakedSliceIntfIdx
+)
+
+func (n *decNaked) init() {
+ if n.inited {
+ return
}
- if n.ms != nil {
- n.ms = n.ms[:0]
+ // n.ms = n.ma[:0]
+ // n.is = n.ia[:0]
+ // n.ns = n.na[:0]
+ // n.ss = n.sa[:0]
+
+ n.rr[decNakedUintIdx] = reflect.ValueOf(&n.u).Elem()
+ n.rr[decNakedIntIdx] = reflect.ValueOf(&n.i).Elem()
+ n.rr[decNakedFloatIdx] = reflect.ValueOf(&n.f).Elem()
+ n.rr[decNakedBytesIdx] = reflect.ValueOf(&n.l).Elem()
+ n.rr[decNakedStringIdx] = reflect.ValueOf(&n.s).Elem()
+ n.rr[decNakedTimeIdx] = reflect.ValueOf(&n.t).Elem()
+ n.rr[decNakedBoolIdx] = reflect.ValueOf(&n.b).Elem()
+
+ for i := range [arrayCacheLen]struct{}{} {
+ n.rr[decNakedIntfIdx*arrayCacheLen+i] = reflect.ValueOf(&(n.ia[i])).Elem()
+ n.rr[decNakedMapIntfIntfIdx*arrayCacheLen+i] = reflect.ValueOf(&(n.ma[i])).Elem()
+ n.rr[decNakedMapStrIntfIdx*arrayCacheLen+i] = reflect.ValueOf(&(n.na[i])).Elem()
+ n.rr[decNakedSliceIntfIdx*arrayCacheLen+i] = reflect.ValueOf(&(n.sa[i])).Elem()
}
- if n.ns != nil {
- n.ns = n.ns[:0]
+ n.inited = true
+ // n.rr[] = reflect.ValueOf(&n.)
+}
+
+func (n *decNaked) reset() {
+ if n == nil {
+ return
}
+ n.li, n.lm, n.ln, n.ls = 0, 0, 0, 0
+}
+
+type rtid2rv struct {
+ rtid uintptr
+ rv reflect.Value
}
// A Decoder reads and decodes an object from an input stream in the codec format.
@@ -1228,31 +1785,43 @@ type Decoder struct {
d decDriver
// NOTE: Decoder shouldn't call it's read methods,
// as the handler MAY need to do some coordination.
- r decReader
- // sa [initCollectionCap]decRtidFn
- h *BasicHandle
+ r decReader
hh Handle
+ h *BasicHandle
+
+ mtr, mtrp, str, strp bool //
be bool // is binary encoding
bytes bool // is bytes reader
js bool // is json handle
+ // ---- cpu cache line boundary?
+
rb bytesDecReader
ri ioDecReader
- cr containerStateRecv
+ bi bufioDecReader
- s []decRtidFn
- f map[uintptr]*decFn
+ // cr containerStateRecv
- // _ uintptr // for alignment purposes, so next one starts from a cache line
+ n *decNaked
+ nsp *sync.Pool
+
+ // ---- cpu cache line boundary?
+
+ is map[string]string // used for interning strings
// cache the mapTypeId and sliceTypeId for faster comparisons
mtid uintptr
stid uintptr
- n decNaked
- b [scratchByteArrayLen]byte
- is map[string]string // used for interning strings
+ b [scratchByteArrayLen]byte
+ // _ uintptr // for alignment purposes, so next one starts from a cache line
+
+ err error
+ // ---- cpu cache line boundary?
+
+ cf codecFner
+ // _ [64]byte // force alignment???
}
// NewDecoder returns a Decoder for decoding a stream of bytes from an io.Reader.
@@ -1273,64 +1842,87 @@ func NewDecoderBytes(in []byte, h Handle) *Decoder {
return d
}
+var defaultDecNaked decNaked
+
func newDecoder(h Handle) *Decoder {
d := &Decoder{hh: h, h: h.getBasicHandle(), be: h.isBinary()}
- n := &d.n
- // n.rs = n.ra[:0]
- n.ms = n.ma[:0]
- n.is = n.ia[:0]
- n.ns = n.na[:0]
- n.ss = n.sa[:0]
+
+ // NOTE: do not initialize d.n here. It is lazily initialized in d.naked()
+
_, d.js = h.(*JsonHandle)
if d.h.InternString {
d.is = make(map[string]string, 32)
}
d.d = h.newDecDriver(d)
- d.cr, _ = d.d.(containerStateRecv)
- // d.d = h.newDecDriver(decReaderT{true, &d.rb, &d.ri})
+ // d.cr, _ = d.d.(containerStateRecv)
return d
}
+// naked must be called before each call to .DecodeNaked,
+// as they will use it.
+func (d *Decoder) naked() *decNaked {
+ if d.n == nil {
+ // consider one of:
+ // - get from sync.Pool (if GC is frequent, there's no value here)
+ // - new alloc (safest. only init'ed if it a naked decode will be done)
+ // - field in Decoder (makes the Decoder struct very big)
+ // To support using a decoder where a DecodeNaked is not needed,
+ // we prefer #1 or #2.
+ // d.n = new(decNaked) // &d.nv // new(decNaked) // grab from a sync.Pool
+ // d.n.init()
+ var v interface{}
+ d.nsp, v = pool.decNaked()
+ d.n = v.(*decNaked)
+ }
+ return d.n
+}
+
func (d *Decoder) resetCommon() {
d.n.reset()
d.d.reset()
+ d.cf.reset(d.hh)
+ d.err = nil
// reset all things which were cached from the Handle,
// but could be changed.
d.mtid, d.stid = 0, 0
+ d.mtr, d.mtrp, d.str, d.strp = false, false, false, false
if d.h.MapType != nil {
- d.mtid = reflect.ValueOf(d.h.MapType).Pointer()
+ d.mtid = rt2id(d.h.MapType)
+ if useLookupRecognizedTypes {
+ d.mtr = isRecognizedRtid(d.mtid)
+ d.mtrp = isRecognizedRtidPtr(d.mtid)
+ }
}
if d.h.SliceType != nil {
- d.stid = reflect.ValueOf(d.h.SliceType).Pointer()
+ d.stid = rt2id(d.h.SliceType)
+ if useLookupRecognizedTypes {
+ d.str = isRecognizedRtid(d.stid)
+ d.strp = isRecognizedRtidPtr(d.stid)
+ }
}
}
func (d *Decoder) Reset(r io.Reader) {
- d.ri.x = &d.b
- // d.s = d.sa[:0]
- d.ri.bs.r = r
- var ok bool
- d.ri.br, ok = r.(decReaderByteScanner)
- if !ok {
- d.ri.br = &d.ri.bs
+ if d.h.ReaderBufferSize > 0 {
+ d.bi.buf = make([]byte, 0, d.h.ReaderBufferSize)
+ d.bi.reset(r)
+ d.r = &d.bi
+ } else {
+ d.ri.x = &d.b
+ // d.s = d.sa[:0]
+ d.ri.reset(r)
+ d.r = &d.ri
}
- d.r = &d.ri
d.resetCommon()
}
func (d *Decoder) ResetBytes(in []byte) {
- // d.s = d.sa[:0]
+ d.bytes = true
d.rb.reset(in)
d.r = &d.rb
d.resetCommon()
}
-// func (d *Decoder) sendContainerState(c containerState) {
-// if d.cr != nil {
-// d.cr.sendContainerState(c)
-// }
-// }
-
// Decode decodes the stream from reader and stores the result in the
// value pointed to by v. v cannot be a nil pointer. v can also be
// a reflect.Value of a pointer.
@@ -1382,171 +1974,171 @@ func (d *Decoder) ResetBytes(in []byte) {
// to its "zero" value (e.g. nil for slice/map, etc).
//
func (d *Decoder) Decode(v interface{}) (err error) {
- defer panicToErr(&err)
- d.decode(v)
+ defer panicToErrs2(&d.err, &err)
+ d.MustDecode(v)
return
}
-// this is not a smart swallow, as it allocates objects and does unnecessary work.
-func (d *Decoder) swallowViaHammer() {
- var blank interface{}
- d.decodeValue(reflect.ValueOf(&blank).Elem(), nil)
+// MustDecode is like Decode, but panics if unable to Decode.
+// This provides insight to the code location that triggered the error.
+func (d *Decoder) MustDecode(v interface{}) {
+ // TODO: Top-level: ensure that v is a pointer and not nil.
+ if d.err != nil {
+ panic(d.err)
+ }
+ if d.d.TryDecodeAsNil() {
+ d.setZero(v)
+ } else {
+ d.decode(v)
+ }
+ if d.nsp != nil {
+ if d.n != nil {
+ d.nsp.Put(d.n)
+ d.n = nil
+ }
+ d.nsp = nil
+ }
+ d.n = nil
+ // xprintf(">>>>>>>> >>>>>>>> num decFns: %v\n", d.cf.sn)
}
+// // this is not a smart swallow, as it allocates objects and does unnecessary work.
+// func (d *Decoder) swallowViaHammer() {
+// var blank interface{}
+// d.decodeValueNoFn(reflect.ValueOf(&blank).Elem())
+// }
+
func (d *Decoder) swallow() {
// smarter decode that just swallows the content
dd := d.d
if dd.TryDecodeAsNil() {
return
}
- cr := d.cr
+ elemsep := d.hh.hasElemSeparators()
switch dd.ContainerType() {
case valueTypeMap:
containerLen := dd.ReadMapStart()
- clenGtEqualZero := containerLen >= 0
- for j := 0; ; j++ {
- if clenGtEqualZero {
- if j >= containerLen {
- break
- }
- } else if dd.CheckBreak() {
- break
- }
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ hasLen := containerLen >= 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ // if clenGtEqualZero {if j >= containerLen {break} } else if dd.CheckBreak() {break}
+ if elemsep {
+ dd.ReadMapElemKey()
}
d.swallow()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if elemsep {
+ dd.ReadMapElemValue()
}
d.swallow()
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
case valueTypeArray:
- containerLenS := dd.ReadArrayStart()
- clenGtEqualZero := containerLenS >= 0
- for j := 0; ; j++ {
- if clenGtEqualZero {
- if j >= containerLenS {
- break
- }
- } else if dd.CheckBreak() {
- break
- }
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ containerLen := dd.ReadArrayStart()
+ hasLen := containerLen >= 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if elemsep {
+ dd.ReadArrayElem()
}
d.swallow()
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ dd.ReadArrayEnd()
case valueTypeBytes:
- dd.DecodeBytes(d.b[:], false, true)
+ dd.DecodeBytes(d.b[:], true)
case valueTypeString:
- dd.DecodeBytes(d.b[:], true, true)
- // dd.DecodeStringAsBytes(d.b[:])
+ dd.DecodeStringAsBytes()
default:
// these are all primitives, which we can get from decodeNaked
// if RawExt using Value, complete the processing.
+ n := d.naked()
dd.DecodeNaked()
- if n := &d.n; n.v == valueTypeExt && n.l == nil {
- l := len(n.is)
- n.is = append(n.is, nil)
- v2 := &n.is[l]
- d.decode(v2)
- n.is = n.is[:l]
+ if n.v == valueTypeExt && n.l == nil {
+ if n.li < arrayCacheLen {
+ n.ia[n.li] = nil
+ n.li++
+ d.decode(&n.ia[n.li-1])
+ n.ia[n.li-1] = nil
+ n.li--
+ } else {
+ var v2 interface{}
+ d.decode(&v2)
+ }
}
}
}
-// MustDecode is like Decode, but panics if unable to Decode.
-// This provides insight to the code location that triggered the error.
-func (d *Decoder) MustDecode(v interface{}) {
- d.decode(v)
-}
-
-func (d *Decoder) decode(iv interface{}) {
- // if ics, ok := iv.(Selfer); ok {
- // ics.CodecDecodeSelf(d)
- // return
- // }
-
- if d.d.TryDecodeAsNil() {
- switch v := iv.(type) {
- case nil:
- case *string:
- *v = ""
- case *bool:
- *v = false
- case *int:
- *v = 0
- case *int8:
- *v = 0
- case *int16:
- *v = 0
- case *int32:
- *v = 0
- case *int64:
- *v = 0
- case *uint:
- *v = 0
- case *uint8:
- *v = 0
- case *uint16:
- *v = 0
- case *uint32:
- *v = 0
- case *uint64:
- *v = 0
- case *float32:
- *v = 0
- case *float64:
- *v = 0
- case *[]uint8:
- *v = nil
- case reflect.Value:
- if v.Kind() != reflect.Ptr || v.IsNil() {
- d.errNotValidPtrValue(v)
- }
- // d.chkPtrValue(v)
- v = v.Elem()
- if v.IsValid() {
+func (d *Decoder) setZero(iv interface{}) {
+ if iv == nil || definitelyNil(iv) {
+ return
+ }
+ switch v := iv.(type) {
+ case *string:
+ *v = ""
+ case *bool:
+ *v = false
+ case *int:
+ *v = 0
+ case *int8:
+ *v = 0
+ case *int16:
+ *v = 0
+ case *int32:
+ *v = 0
+ case *int64:
+ *v = 0
+ case *uint:
+ *v = 0
+ case *uint8:
+ *v = 0
+ case *uint16:
+ *v = 0
+ case *uint32:
+ *v = 0
+ case *uint64:
+ *v = 0
+ case *float32:
+ *v = 0
+ case *float64:
+ *v = 0
+ case *[]uint8:
+ *v = nil
+ case *Raw:
+ *v = nil
+ case reflect.Value:
+ v = d.ensureDecodeable(v)
+ if v.CanSet() {
+ v.Set(reflect.Zero(v.Type()))
+ } // TODO: else drain if chan, clear if map, set all to nil if slice???
+ default:
+ if !fastpathDecodeSetZeroTypeSwitch(iv, d) {
+ v := reflect.ValueOf(iv)
+ v = d.ensureDecodeable(v)
+ if v.CanSet() {
v.Set(reflect.Zero(v.Type()))
- }
- default:
- rv := reflect.ValueOf(iv)
- if rv.Kind() != reflect.Ptr || rv.IsNil() {
- d.errNotValidPtrValue(rv)
- }
- // d.chkPtrValue(rv)
- rv = rv.Elem()
- if rv.IsValid() {
- rv.Set(reflect.Zero(rv.Type()))
- }
+ } // TODO: else drain if chan, clear if map, set all to nil if slice???
}
- return
}
+}
- switch v := iv.(type) {
- case nil:
+func (d *Decoder) decode(iv interface{}) {
+ // check nil and interfaces explicitly,
+ // so that type switches just have a run of constant non-interface types.
+ if iv == nil {
d.error(cannotDecodeIntoNilErr)
return
-
- case Selfer:
+ }
+ if v, ok := iv.(Selfer); ok {
v.CodecDecodeSelf(d)
+ return
+ }
+
+ switch v := iv.(type) {
+ // case nil:
+ // case Selfer:
case reflect.Value:
- if v.Kind() != reflect.Ptr || v.IsNil() {
- d.errNotValidPtrValue(v)
- }
- // d.chkPtrValue(v)
- d.decodeValueNotNil(v.Elem(), nil)
+ v = d.ensureDecodeable(v)
+ d.decodeValue(v, nil, false, true) // TODO: maybe ask to recognize ...
case *string:
-
*v = d.d.DecodeString()
case *bool:
*v = d.d.DecodeBool()
@@ -1575,233 +2167,80 @@ func (d *Decoder) decode(iv interface{}) {
case *float64:
*v = d.d.DecodeFloat(false)
case *[]uint8:
- *v = d.d.DecodeBytes(*v, false, false)
+ *v = d.d.DecodeBytes(*v, false)
+
+ case *Raw:
+ *v = d.rawBytes()
case *interface{}:
- d.decodeValueNotNil(reflect.ValueOf(iv).Elem(), nil)
+ d.decodeValue(reflect.ValueOf(iv).Elem(), nil, false, true) // TODO: consider recognize here
+ // d.decodeValueNotNil(reflect.ValueOf(iv).Elem())
default:
if !fastpathDecodeTypeSwitch(iv, d) {
- d.decodeI(iv, true, false, false, false)
+ v := reflect.ValueOf(iv)
+ v = d.ensureDecodeable(v)
+ d.decodeValue(v, nil, false, false)
+ // d.decodeValueFallback(v)
}
}
}
-func (d *Decoder) preDecodeValue(rv reflect.Value, tryNil bool) (rv2 reflect.Value, proceed bool) {
- if tryNil && d.d.TryDecodeAsNil() {
- // No need to check if a ptr, recursively, to determine
- // whether to set value to nil.
- // Just always set value to its zero type.
- if rv.IsValid() { // rv.CanSet() // always settable, except it's invalid
- rv.Set(reflect.Zero(rv.Type()))
- }
- return
- }
-
+func (d *Decoder) decodeValue(rv reflect.Value, fn *codecFn, tryRecognized, chkAll bool) {
// If stream is not containing a nil value, then we can deref to the base
// non-pointer value, and decode into that.
- for rv.Kind() == reflect.Ptr {
- if rv.IsNil() {
- rv.Set(reflect.New(rv.Type().Elem()))
- }
- rv = rv.Elem()
- }
- return rv, true
-}
-
-func (d *Decoder) decodeI(iv interface{}, checkPtr, tryNil, checkFastpath, checkCodecSelfer bool) {
- rv := reflect.ValueOf(iv)
- if checkPtr {
- if rv.Kind() != reflect.Ptr || rv.IsNil() {
- d.errNotValidPtrValue(rv)
- }
- // d.chkPtrValue(rv)
- }
- rv, proceed := d.preDecodeValue(rv, tryNil)
- if proceed {
- fn := d.getDecFn(rv.Type(), checkFastpath, checkCodecSelfer)
- fn.f(&fn.i, rv)
- }
-}
-
-func (d *Decoder) decodeValue(rv reflect.Value, fn *decFn) {
- if rv, proceed := d.preDecodeValue(rv, true); proceed {
- if fn == nil {
- fn = d.getDecFn(rv.Type(), true, true)
- }
- fn.f(&fn.i, rv)
- }
-}
-
-func (d *Decoder) decodeValueNotNil(rv reflect.Value, fn *decFn) {
- if rv, proceed := d.preDecodeValue(rv, false); proceed {
- if fn == nil {
- fn = d.getDecFn(rv.Type(), true, true)
- }
- fn.f(&fn.i, rv)
- }
-}
-
-func (d *Decoder) getDecFn(rt reflect.Type, checkFastpath, checkCodecSelfer bool) (fn *decFn) {
- rtid := reflect.ValueOf(rt).Pointer()
-
- // retrieve or register a focus'ed function for this type
- // to eliminate need to do the retrieval multiple times
-
- // if d.f == nil && d.s == nil { debugf("---->Creating new dec f map for type: %v\n", rt) }
- var ok bool
- if useMapForCodecCache {
- fn, ok = d.f[rtid]
- } else {
- for i := range d.s {
- v := &(d.s[i])
- if v.rtid == rtid {
- fn, ok = &(v.fn), true
+ var rvp reflect.Value
+ var rvpValid bool
+ if rv.Kind() == reflect.Ptr {
+ rvpValid = true
+ for {
+ if rv.IsNil() {
+ rv.Set(reflect.New(rv.Type().Elem()))
+ }
+ rvp = rv
+ rv = rv.Elem()
+ if rv.Kind() != reflect.Ptr {
break
}
}
}
- if ok {
- return
- }
- if useMapForCodecCache {
- if d.f == nil {
- d.f = make(map[uintptr]*decFn, initCollectionCap)
- }
- fn = new(decFn)
- d.f[rtid] = fn
- } else {
- if d.s == nil {
- d.s = make([]decRtidFn, 0, initCollectionCap)
+ if useLookupRecognizedTypes && tryRecognized && isRecognizedRtid(rv2rtid(rv)) {
+ if rvpValid {
+ d.decode(rv2i(rvp))
+ return
+ } else if rv.CanAddr() {
+ d.decode(rv2i(rv.Addr()))
+ return
}
- d.s = append(d.s, decRtidFn{rtid: rtid})
- fn = &(d.s[len(d.s)-1]).fn
}
- // debugf("\tCreating new dec fn for type: %v\n", rt)
- ti := d.h.getTypeInfo(rtid, rt)
- fi := &(fn.i)
- fi.d = d
- fi.ti = ti
-
- // An extension can be registered for any type, regardless of the Kind
- // (e.g. type BitSet int64, type MyStruct { / * unexported fields * / }, type X []int, etc.
- //
- // We can't check if it's an extension byte here first, because the user may have
- // registered a pointer or non-pointer type, meaning we may have to recurse first
- // before matching a mapped type, even though the extension byte is already detected.
- //
- // NOTE: if decoding into a nil interface{}, we return a non-nil
- // value except even if the container registers a length of 0.
- if checkCodecSelfer && ti.cs {
- fn.f = (*decFnInfo).selferUnmarshal
- } else if rtid == rawExtTypId {
- fn.f = (*decFnInfo).rawExt
- } else if d.d.IsBuiltinType(rtid) {
- fn.f = (*decFnInfo).builtin
- } else if xfFn := d.h.getExt(rtid); xfFn != nil {
- fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext
- fn.f = (*decFnInfo).ext
- } else if supportMarshalInterfaces && d.be && ti.bunm {
- fn.f = (*decFnInfo).binaryUnmarshal
- } else if supportMarshalInterfaces && !d.be && d.js && ti.junm {
- //If JSON, we should check JSONUnmarshal before textUnmarshal
- fn.f = (*decFnInfo).jsonUnmarshal
- } else if supportMarshalInterfaces && !d.be && ti.tunm {
- fn.f = (*decFnInfo).textUnmarshal
- } else {
- rk := rt.Kind()
- if fastpathEnabled && checkFastpath && (rk == reflect.Map || rk == reflect.Slice) {
- if rt.PkgPath() == "" {
- if idx := fastpathAV.index(rtid); idx != -1 {
- fn.f = fastpathAV[idx].decfn
- }
- } else {
- // use mapping for underlying type if there
- ok = false
- var rtu reflect.Type
- if rk == reflect.Map {
- rtu = reflect.MapOf(rt.Key(), rt.Elem())
- } else {
- rtu = reflect.SliceOf(rt.Elem())
- }
- rtuid := reflect.ValueOf(rtu).Pointer()
- if idx := fastpathAV.index(rtuid); idx != -1 {
- xfnf := fastpathAV[idx].decfn
- xrt := fastpathAV[idx].rt
- fn.f = func(xf *decFnInfo, xrv reflect.Value) {
- // xfnf(xf, xrv.Convert(xrt))
- xfnf(xf, xrv.Addr().Convert(reflect.PtrTo(xrt)).Elem())
- }
- }
- }
- }
- if fn.f == nil {
- switch rk {
- case reflect.String:
- fn.f = (*decFnInfo).kString
- case reflect.Bool:
- fn.f = (*decFnInfo).kBool
- case reflect.Int:
- fn.f = (*decFnInfo).kInt
- case reflect.Int64:
- fn.f = (*decFnInfo).kInt64
- case reflect.Int32:
- fn.f = (*decFnInfo).kInt32
- case reflect.Int8:
- fn.f = (*decFnInfo).kInt8
- case reflect.Int16:
- fn.f = (*decFnInfo).kInt16
- case reflect.Float32:
- fn.f = (*decFnInfo).kFloat32
- case reflect.Float64:
- fn.f = (*decFnInfo).kFloat64
- case reflect.Uint8:
- fn.f = (*decFnInfo).kUint8
- case reflect.Uint64:
- fn.f = (*decFnInfo).kUint64
- case reflect.Uint:
- fn.f = (*decFnInfo).kUint
- case reflect.Uint32:
- fn.f = (*decFnInfo).kUint32
- case reflect.Uint16:
- fn.f = (*decFnInfo).kUint16
- // case reflect.Ptr:
- // fn.f = (*decFnInfo).kPtr
- case reflect.Uintptr:
- fn.f = (*decFnInfo).kUintptr
- case reflect.Interface:
- fn.f = (*decFnInfo).kInterface
- case reflect.Struct:
- fn.f = (*decFnInfo).kStruct
- case reflect.Chan:
- fi.seq = seqTypeChan
- fn.f = (*decFnInfo).kSlice
- case reflect.Slice:
- fi.seq = seqTypeSlice
- fn.f = (*decFnInfo).kSlice
- case reflect.Array:
- fi.seq = seqTypeArray
- fn.f = (*decFnInfo).kArray
- case reflect.Map:
- fn.f = (*decFnInfo).kMap
- default:
- fn.f = (*decFnInfo).kErr
- }
+ if fn == nil {
+ // always pass checkCodecSelfer=true, in case T or ****T is passed, where *T is a Selfer
+ fn = d.cf.get(rv.Type(), chkAll, true) // chkAll, chkAll)
+ }
+ if fn.i.addr {
+ if rvpValid {
+ fn.fd(d, &fn.i, rvp)
+ } else if rv.CanAddr() {
+ fn.fd(d, &fn.i, rv.Addr())
+ } else {
+ fn.fd(d, &fn.i, rv)
}
+ } else {
+ fn.fd(d, &fn.i, rv)
}
-
- return
+ // return rv
}
func (d *Decoder) structFieldNotFound(index int, rvkencname string) {
+ // NOTE: rvkencname may be a stringView, so don't pass it to another function.
if d.h.ErrorIfNoField {
if index >= 0 {
d.errorf("no matching struct field found when decoding stream array at index %v", index)
return
} else if rvkencname != "" {
- d.errorf("no matching struct field found when decoding stream map with key %s", rvkencname)
+ d.errorf("no matching struct field found when decoding stream map with key " + rvkencname)
return
}
}
@@ -1814,15 +2253,33 @@ func (d *Decoder) arrayCannotExpand(sliceLen, streamLen int) {
}
}
-func (d *Decoder) chkPtrValue(rv reflect.Value) {
- // We can only decode into a non-nil pointer
- if rv.Kind() == reflect.Ptr && !rv.IsNil() {
- return
+func isDecodeable(rv reflect.Value) (rv2 reflect.Value, canDecode bool) {
+ switch rv.Kind() {
+ case reflect.Array:
+ return rv, true
+ case reflect.Ptr:
+ if !rv.IsNil() {
+ return rv.Elem(), true
+ }
+ case reflect.Slice, reflect.Chan, reflect.Map:
+ if !rv.IsNil() {
+ return rv, true
+ }
}
- d.errNotValidPtrValue(rv)
+ return
}
-func (d *Decoder) errNotValidPtrValue(rv reflect.Value) {
+func (d *Decoder) ensureDecodeable(rv reflect.Value) (rv2 reflect.Value) {
+ // decode can take any reflect.Value that is a inherently addressable i.e.
+ // - array
+ // - non-nil chan (we will SEND to it)
+ // - non-nil slice (we will set its elements)
+ // - non-nil map (we will put into it)
+ // - non-nil pointer (we can "update" it)
+ rv2, canDecode := isDecodeable(rv)
+ if canDecode {
+ return
+ }
if !rv.IsValid() {
d.error(cannotDecodeIntoNilErr)
return
@@ -1831,10 +2288,32 @@ func (d *Decoder) errNotValidPtrValue(rv reflect.Value) {
d.errorf("cannot decode into a value without an interface: %v", rv)
return
}
- rvi := rv.Interface()
- d.errorf("cannot decode into non-pointer or nil pointer. Got: %v, %T, %v", rv.Kind(), rvi, rvi)
+ rvi := rv2i(rv)
+ d.errorf("cannot decode into value of kind: %v, type: %T, %v", rv.Kind(), rvi, rvi)
+ return
}
+// func (d *Decoder) chkPtrValue(rv reflect.Value) {
+// // We can only decode into a non-nil pointer
+// if rv.Kind() == reflect.Ptr && !rv.IsNil() {
+// return
+// }
+// d.errNotValidPtrValue(rv)
+// }
+
+// func (d *Decoder) errNotValidPtrValue(rv reflect.Value) {
+// if !rv.IsValid() {
+// d.error(cannotDecodeIntoNilErr)
+// return
+// }
+// if !rv.CanInterface() {
+// d.errorf("cannot decode into a value without an interface: %v", rv)
+// return
+// }
+// rvi := rv2i(rv)
+// d.errorf("cannot decode into non-pointer or nil pointer. Got: %v, %T, %v", rv.Kind(), rvi, rvi)
+// }
+
func (d *Decoder) error(err error) {
panic(err)
}
@@ -1847,30 +2326,38 @@ func (d *Decoder) errorf(format string, params ...interface{}) {
panic(err)
}
+// Possibly get an interned version of a string
+//
+// This should mostly be used for map keys, where the key type is string.
+// This is because keys of a map/struct are typically reused across many objects.
func (d *Decoder) string(v []byte) (s string) {
- if d.is != nil {
- s, ok := d.is[string(v)] // no allocation here.
- if !ok {
- s = string(v)
- d.is[s] = s
- }
- return s
+ if d.is == nil {
+ return string(v) // don't return stringView, as we need a real string here.
}
- return string(v) // don't return stringView, as we need a real string here.
-}
-
-func (d *Decoder) intern(s string) {
- if d.is != nil {
+ s, ok := d.is[string(v)] // no allocation here, per go implementation
+ if !ok {
+ s = string(v) // new allocation here
d.is[s] = s
}
+ return s
}
// nextValueBytes returns the next value in the stream as a set of bytes.
-func (d *Decoder) nextValueBytes() []byte {
+func (d *Decoder) nextValueBytes() (bs []byte) {
d.d.uncacheRead()
d.r.track()
d.swallow()
- return d.r.stopTrack()
+ bs = d.r.stopTrack()
+ return
+}
+
+func (d *Decoder) rawBytes() []byte {
+ // ensure that this is not a view into the bytes
+ // i.e. make new copy always.
+ bs := d.nextValueBytes()
+ bs2 := make([]byte, len(bs))
+ copy(bs2, bs)
+ return bs2
}
// --------------------------------------------------
@@ -1900,45 +2387,49 @@ func (d *Decoder) decSliceHelperStart() (x decSliceHelper, clen int) {
}
func (x decSliceHelper) End() {
- cr := x.d.cr
- if cr == nil {
- return
- }
if x.array {
- cr.sendContainerState(containerArrayEnd)
+ x.d.d.ReadArrayEnd()
} else {
- cr.sendContainerState(containerMapEnd)
+ x.d.d.ReadMapEnd()
}
}
func (x decSliceHelper) ElemContainerState(index int) {
- cr := x.d.cr
- if cr == nil {
- return
- }
if x.array {
- cr.sendContainerState(containerArrayElem)
+ x.d.d.ReadArrayElem()
} else {
if index%2 == 0 {
- cr.sendContainerState(containerMapKey)
+ x.d.d.ReadMapElemKey()
} else {
- cr.sendContainerState(containerMapValue)
+ x.d.d.ReadMapElemValue()
}
}
}
-func decByteSlice(r decReader, clen int, bs []byte) (bsOut []byte) {
+func decByteSlice(r decReader, clen, maxInitLen int, bs []byte) (bsOut []byte) {
if clen == 0 {
return zeroByteSlice
}
if len(bs) == clen {
bsOut = bs
+ r.readb(bsOut)
} else if cap(bs) >= clen {
bsOut = bs[:clen]
+ r.readb(bsOut)
} else {
- bsOut = make([]byte, clen)
+ // bsOut = make([]byte, clen)
+ len2 := decInferLen(clen, maxInitLen, 1)
+ bsOut = make([]byte, len2)
+ r.readb(bsOut)
+ for len2 < clen {
+ len3 := decInferLen(clen-len2, maxInitLen, 1)
+ bs3 := bsOut
+ bsOut = make([]byte, len2+len3)
+ copy(bsOut, bs3)
+ r.readb(bsOut[len2:])
+ len2 += len3
+ }
}
- r.readb(bsOut)
return
}
@@ -1962,7 +2453,7 @@ func detachZeroCopyBytes(isBytesReader bool, dest []byte, in []byte) (out []byte
// - maxlen: max length to be returned.
// if <= 0, it is unset, and we infer it based on the unit size
// - unit: number of bytes for each element of the collection
-func decInferLen(clen, maxlen, unit int) (rvlen int, truncated bool) {
+func decInferLen(clen, maxlen, unit int) (rvlen int) {
// handle when maxlen is not set i.e. <= 0
if clen <= 0 {
return
@@ -1981,39 +2472,49 @@ func decInferLen(clen, maxlen, unit int) (rvlen int, truncated bool) {
}
if clen > maxlen {
rvlen = maxlen
- truncated = true
} else {
rvlen = clen
}
return
- // if clen <= 0 {
- // rvlen = 0
- // } else if maxlen > 0 && clen > maxlen {
- // rvlen = maxlen
- // truncated = true
- // } else {
- // rvlen = clen
- // }
- // return
}
-// // implement overall decReader wrapping both, for possible use inline:
-// type decReaderT struct {
-// bytes bool
-// rb *bytesDecReader
-// ri *ioDecReader
-// }
-//
-// // implement *Decoder as a decReader.
-// // Using decReaderT (defined just above) caused performance degradation
-// // possibly because of constant copying the value,
-// // and some value->interface conversion causing allocation.
-// func (d *Decoder) unreadn1() {
-// if d.bytes {
-// d.rb.unreadn1()
-// } else {
-// d.ri.unreadn1()
-// }
-// }
-// ... for other methods of decReader.
-// Testing showed that performance improvement was negligible.
+func decExpandSliceRV(s reflect.Value, st reflect.Type, stElemSize, num, slen, scap int) (
+ s2 reflect.Value, scap2 int, changed bool) {
+ l1 := slen + num // new slice length
+ if l1 < slen {
+ panic("expandSlice: slice overflow")
+ }
+ if l1 <= scap {
+ if s.CanSet() {
+ s.SetLen(l1)
+ } else {
+ s2 = s.Slice(0, l1)
+ scap2 = scap
+ changed = true
+ }
+ return
+ }
+ scap2 = growCap(scap, stElemSize, num)
+ s2 = reflect.MakeSlice(st, l1, scap2)
+ changed = true
+ reflect.Copy(s2, s)
+ return
+}
+
+func decReadFull(r io.Reader, bs []byte) (n int, err error) {
+ var nn int
+ for n < len(bs) && err == nil {
+ nn, err = r.Read(bs[n:])
+ if nn > 0 {
+ if err == io.EOF {
+ // leave EOF for next time
+ err = nil
+ }
+ n += nn
+ }
+ }
+
+ // do not do this - it serves no purpose
+ // if n != len(bs) && err == io.EOF { err = io.ErrUnexpectedEOF }
+ return
+}
diff --git a/codec/encode.go b/codec/encode.go
index d7ad330..dd15a2f 100644
--- a/codec/encode.go
+++ b/codec/encode.go
@@ -4,6 +4,7 @@
package codec
import (
+ "bufio"
"encoding"
"fmt"
"io"
@@ -12,9 +13,7 @@ import (
"sync"
)
-const (
- defEncByteBufSize = 1 << 6 // 4:16, 6:64, 8:256, 10:1024
-)
+const defEncByteBufSize = 1 << 6 // 4:16, 6:64, 8:256, 10:1024
// AsSymbolFlag defines what should be encoded as symbols.
type AsSymbolFlag uint8
@@ -44,12 +43,14 @@ type encWriter interface {
writestr(string)
writen1(byte)
writen2(byte, byte)
+ writen4(byte, byte, byte, byte)
+ writen5(byte, byte, byte, byte, byte)
atEndOfEncode()
}
// encDriver abstracts the actual codec (binc vs msgpack, etc)
type encDriver interface {
- IsBuiltinType(rt uintptr) bool
+ // IsBuiltinType(rt uintptr) bool
EncodeBuiltin(rt uintptr, v interface{})
EncodeNil()
EncodeInt(i int64)
@@ -60,8 +61,13 @@ type encDriver interface {
// encodeExtPreamble(xtag byte, length int)
EncodeRawExt(re *RawExt, e *Encoder)
EncodeExt(v interface{}, xtag uint64, ext Ext, e *Encoder)
- EncodeArrayStart(length int)
- EncodeMapStart(length int)
+ WriteArrayStart(length int)
+ WriteArrayElem()
+ WriteArrayEnd()
+ WriteMapStart(length int)
+ WriteMapElemKey()
+ WriteMapElemValue()
+ WriteMapEnd()
EncodeString(c charEncoding, v string)
EncodeSymbol(v string)
EncodeStringBytes(c charEncoding, v []byte)
@@ -70,25 +76,40 @@ type encDriver interface {
//encStringRunes(c charEncoding, v []rune)
reset()
+ atEndOfEncode()
+}
+
+type ioEncStringWriter interface {
+ WriteString(s string) (n int, err error)
+}
+
+type ioEncFlusher interface {
+ Flush() error
}
type encDriverAsis interface {
EncodeAsis(v []byte)
}
-type encNoSeparator struct{}
+// type encNoSeparator struct{}
+// func (_ encNoSeparator) EncodeEnd() {}
-func (_ encNoSeparator) EncodeEnd() {}
+type encDriverNoopContainerWriter struct{}
-type ioEncWriterWriter interface {
- WriteByte(c byte) error
- WriteString(s string) (n int, err error)
- Write(p []byte) (n int, err error)
-}
+func (_ encDriverNoopContainerWriter) WriteArrayStart(length int) {}
+func (_ encDriverNoopContainerWriter) WriteArrayElem() {}
+func (_ encDriverNoopContainerWriter) WriteArrayEnd() {}
+func (_ encDriverNoopContainerWriter) WriteMapStart(length int) {}
+func (_ encDriverNoopContainerWriter) WriteMapElemKey() {}
+func (_ encDriverNoopContainerWriter) WriteMapElemValue() {}
+func (_ encDriverNoopContainerWriter) WriteMapEnd() {}
+func (_ encDriverNoopContainerWriter) atEndOfEncode() {}
-type ioEncStringWriter interface {
- WriteString(s string) (n int, err error)
-}
+// type ioEncWriterWriter interface {
+// WriteByte(c byte) error
+// WriteString(s string) (n int, err error)
+// Write(p []byte) (n int, err error)
+// }
type EncodeOptions struct {
// Encode a struct as an array, and not as a map
@@ -119,6 +140,19 @@ type EncodeOptions struct {
// This is opt-in, as there may be a performance hit to checking circular references.
CheckCircularRef bool
+ // RecursiveEmptyCheck controls whether we descend into interfaces, structs and pointers
+ // when checking if a value is empty.
+ //
+ // Note that this may make OmitEmpty more expensive, as it incurs a lot more reflect calls.
+ RecursiveEmptyCheck bool
+
+ // Raw controls whether we encode Raw values.
+ // This is a "dangerous" option and must be explicitly set.
+ // If set, we blindly encode Raw values as-is, without checking
+ // if they are a correct representation of a value in that format.
+ // If unset, we error out.
+ Raw bool
+
// AsSymbols defines what should be encoded as symbols.
//
// Encoding as symbols can reduce the encoded size significantly.
@@ -133,81 +167,119 @@ type EncodeOptions struct {
// AsSymbolMapStringKeys
// AsSymbolMapStringKeysFlag | AsSymbolStructFieldNameFlag
AsSymbols AsSymbolFlag
+
+ // WriterBufferSize is the size of the buffer used when writing.
+ //
+ // if > 0, we use a smart buffer internally for performance purposes.
+ WriterBufferSize int
}
// ---------------------------------------------
-type simpleIoEncWriterWriter struct {
+type simpleIoEncWriter struct {
+ io.Writer
+}
+
+// type bufIoEncWriter struct {
+// w io.Writer
+// buf []byte
+// err error
+// }
+
+// func (x *bufIoEncWriter) Write(b []byte) (n int, err error) {
+// if x.err != nil {
+// return 0, x.err
+// }
+// if cap(x.buf)-len(x.buf) >= len(b) {
+// x.buf = append(x.buf, b)
+// return len(b), nil
+// }
+// n, err = x.w.Write(x.buf)
+// if err != nil {
+// x.err = err
+// return 0, x.err
+// }
+// n, err = x.w.Write(b)
+// x.err = err
+// return
+// }
+
+// ioEncWriter implements encWriter and can write to an io.Writer implementation
+type ioEncWriter struct {
w io.Writer
+ ww io.Writer
bw io.ByteWriter
sw ioEncStringWriter
+ fw ioEncFlusher
+ b [8]byte
}
-func (o *simpleIoEncWriterWriter) WriteByte(c byte) (err error) {
- if o.bw != nil {
- return o.bw.WriteByte(c)
- }
- _, err = o.w.Write([]byte{c})
+func (z *ioEncWriter) WriteByte(b byte) (err error) {
+ // x.bs[0] = b
+ // _, err = x.ww.Write(x.bs[:])
+ z.b[0] = b
+ _, err = z.w.Write(z.b[:1])
return
}
-func (o *simpleIoEncWriterWriter) WriteString(s string) (n int, err error) {
- if o.sw != nil {
- return o.sw.WriteString(s)
- }
- // return o.w.Write([]byte(s))
- return o.w.Write(bytesView(s))
+func (z *ioEncWriter) WriteString(s string) (n int, err error) {
+ return z.w.Write(bytesView(s))
}
-func (o *simpleIoEncWriterWriter) Write(p []byte) (n int, err error) {
- return o.w.Write(p)
+func (z *ioEncWriter) writeb(bs []byte) {
+ // if len(bs) == 0 {
+ // return
+ // }
+ if _, err := z.ww.Write(bs); err != nil {
+ panic(err)
+ }
}
-// ----------------------------------------
-
-// ioEncWriter implements encWriter and can write to an io.Writer implementation
-type ioEncWriter struct {
- w ioEncWriterWriter
- s simpleIoEncWriterWriter
- // x [8]byte // temp byte array re-used internally for efficiency
+func (z *ioEncWriter) writestr(s string) {
+ // if len(s) == 0 {
+ // return
+ // }
+ if _, err := z.sw.WriteString(s); err != nil {
+ panic(err)
+ }
}
-func (z *ioEncWriter) writeb(bs []byte) {
- if len(bs) == 0 {
- return
- }
- n, err := z.w.Write(bs)
- if err != nil {
+func (z *ioEncWriter) writen1(b byte) {
+ if err := z.bw.WriteByte(b); err != nil {
panic(err)
}
- if n != len(bs) {
- panic(fmt.Errorf("incorrect num bytes written. Expecting: %v, Wrote: %v", len(bs), n))
+}
+
+func (z *ioEncWriter) writen2(b1, b2 byte) {
+ var err error
+ if err = z.bw.WriteByte(b1); err == nil {
+ if err = z.bw.WriteByte(b2); err == nil {
+ return
+ }
}
+ panic(err)
}
-func (z *ioEncWriter) writestr(s string) {
- n, err := z.w.WriteString(s)
- if err != nil {
+func (z *ioEncWriter) writen4(b1, b2, b3, b4 byte) {
+ z.b[0], z.b[1], z.b[2], z.b[3] = b1, b2, b3, b4
+ if _, err := z.ww.Write(z.b[:4]); err != nil {
panic(err)
}
- if n != len(s) {
- panic(fmt.Errorf("incorrect num bytes written. Expecting: %v, Wrote: %v", len(s), n))
- }
}
-func (z *ioEncWriter) writen1(b byte) {
- if err := z.w.WriteByte(b); err != nil {
+func (z *ioEncWriter) writen5(b1, b2, b3, b4, b5 byte) {
+ z.b[0], z.b[1], z.b[2], z.b[3], z.b[4] = b1, b2, b3, b4, b5
+ if _, err := z.ww.Write(z.b[:5]); err != nil {
panic(err)
}
}
-func (z *ioEncWriter) writen2(b1 byte, b2 byte) {
- z.writen1(b1)
- z.writen1(b2)
+func (z *ioEncWriter) atEndOfEncode() {
+ if z.fw != nil {
+ z.fw.Flush()
+ }
}
-func (z *ioEncWriter) atEndOfEncode() {}
-
// ----------------------------------------
// bytesEncWriter implements encWriter and can write to an byte slice.
@@ -219,45 +291,74 @@ type bytesEncWriter struct {
}
func (z *bytesEncWriter) writeb(s []byte) {
- if len(s) > 0 {
- c := z.grow(len(s))
- copy(z.b[c:], s)
+ oc, a := z.growNoAlloc(len(s))
+ if a {
+ z.growAlloc(len(s), oc)
}
+ copy(z.b[oc:], s)
}
func (z *bytesEncWriter) writestr(s string) {
- if len(s) > 0 {
- c := z.grow(len(s))
- copy(z.b[c:], s)
+ oc, a := z.growNoAlloc(len(s))
+ if a {
+ z.growAlloc(len(s), oc)
}
+ copy(z.b[oc:], s)
}
func (z *bytesEncWriter) writen1(b1 byte) {
- c := z.grow(1)
- z.b[c] = b1
+ oc, a := z.growNoAlloc(1)
+ if a {
+ z.growAlloc(1, oc)
+ }
+ z.b[oc] = b1
}
-func (z *bytesEncWriter) writen2(b1 byte, b2 byte) {
- c := z.grow(2)
- z.b[c] = b1
- z.b[c+1] = b2
+func (z *bytesEncWriter) writen2(b1, b2 byte) {
+ oc, a := z.growNoAlloc(2)
+ if a {
+ z.growAlloc(2, oc)
+ }
+ z.b[oc+1] = b2
+ z.b[oc] = b1
+}
+
+func (z *bytesEncWriter) writen4(b1, b2, b3, b4 byte) {
+ oc, a := z.growNoAlloc(4)
+ if a {
+ z.growAlloc(4, oc)
+ }
+ z.b[oc+3] = b4
+ z.b[oc+2] = b3
+ z.b[oc+1] = b2
+ z.b[oc] = b1
+}
+
+func (z *bytesEncWriter) writen5(b1, b2, b3, b4, b5 byte) {
+ oc, a := z.growNoAlloc(5)
+ if a {
+ z.growAlloc(5, oc)
+ }
+ z.b[oc+4] = b5
+ z.b[oc+3] = b4
+ z.b[oc+2] = b3
+ z.b[oc+1] = b2
+ z.b[oc] = b1
}
func (z *bytesEncWriter) atEndOfEncode() {
*(z.out) = z.b[:z.c]
}
-func (z *bytesEncWriter) grow(n int) (oldcursor int) {
+// have a growNoalloc(n int), which can be inlined.
+// if allocation is needed, then call growAlloc(n int)
+
+func (z *bytesEncWriter) growNoAlloc(n int) (oldcursor int, allocNeeded bool) {
oldcursor = z.c
- z.c = oldcursor + n
+ z.c = z.c + n
if z.c > len(z.b) {
if z.c > cap(z.b) {
- // appendslice logic (if cap < 1024, *2, else *1.25): more expensive. many copy calls.
- // bytes.Buffer model (2*cap + n): much better
- // bs := make([]byte, 2*cap(z.b)+n)
- bs := make([]byte, growCap(cap(z.b), 1, n))
- copy(bs, z.b[:oldcursor])
- z.b = bs
+ allocNeeded = true
} else {
z.b = z.b[:cap(z.b)]
}
@@ -265,156 +366,158 @@ func (z *bytesEncWriter) grow(n int) (oldcursor int) {
return
}
+func (z *bytesEncWriter) growAlloc(n int, oldcursor int) {
+ // appendslice logic (if cap < 1024, *2, else *1.25): more expensive. many copy calls.
+ // bytes.Buffer model (2*cap + n): much better
+ // bs := make([]byte, 2*cap(z.b)+n)
+ bs := make([]byte, growCap(cap(z.b), 1, n))
+ copy(bs, z.b[:oldcursor])
+ z.b = bs
+}
+
// ---------------------------------------------
-type encFnInfo struct {
- e *Encoder
- ti *typeInfo
- xfFn Ext
- xfTag uint64
- seq seqType
+func (e *Encoder) builtin(f *codecFnInfo, rv reflect.Value) {
+ e.e.EncodeBuiltin(f.ti.rtid, rv2i(rv))
}
-func (f *encFnInfo) builtin(rv reflect.Value) {
- f.e.e.EncodeBuiltin(f.ti.rtid, rv.Interface())
+func (e *Encoder) raw(f *codecFnInfo, rv reflect.Value) {
+ e.rawBytes(rv2i(rv).(Raw))
}
-func (f *encFnInfo) rawExt(rv reflect.Value) {
- // rev := rv.Interface().(RawExt)
- // f.e.e.EncodeRawExt(&rev, f.e)
+func (e *Encoder) rawExt(f *codecFnInfo, rv reflect.Value) {
+ // rev := rv2i(rv).(RawExt)
+ // e.e.EncodeRawExt(&rev, e)
var re *RawExt
if rv.CanAddr() {
- re = rv.Addr().Interface().(*RawExt)
+ re = rv2i(rv.Addr()).(*RawExt)
} else {
- rev := rv.Interface().(RawExt)
+ rev := rv2i(rv).(RawExt)
re = &rev
}
- f.e.e.EncodeRawExt(re, f.e)
+ e.e.EncodeRawExt(re, e)
}
-func (f *encFnInfo) ext(rv reflect.Value) {
+func (e *Encoder) ext(f *codecFnInfo, rv reflect.Value) {
// if this is a struct|array and it was addressable, then pass the address directly (not the value)
if k := rv.Kind(); (k == reflect.Struct || k == reflect.Array) && rv.CanAddr() {
rv = rv.Addr()
}
- f.e.e.EncodeExt(rv.Interface(), f.xfTag, f.xfFn, f.e)
+ e.e.EncodeExt(rv2i(rv), f.xfTag, f.xfFn, e)
}
-func (f *encFnInfo) getValueForMarshalInterface(rv reflect.Value, indir int8) (v interface{}, proceed bool) {
+func (e *Encoder) getValueForMarshalInterface(rv reflect.Value, indir int8) (v interface{}, proceed bool) {
if indir == 0 {
- v = rv.Interface()
+ v = rv2i(rv)
} else if indir == -1 {
// If a non-pointer was passed to Encode(), then that value is not addressable.
- // Take addr if addresable, else copy value to an addressable value.
+ // Take addr if addressable, else copy value to an addressable value.
if rv.CanAddr() {
- v = rv.Addr().Interface()
+ v = rv2i(rv.Addr())
} else {
rv2 := reflect.New(rv.Type())
rv2.Elem().Set(rv)
- v = rv2.Interface()
- // fmt.Printf("rv.Type: %v, rv2.Type: %v, v: %v\n", rv.Type(), rv2.Type(), v)
+ v = rv2i(rv2)
}
} else {
for j := int8(0); j < indir; j++ {
if rv.IsNil() {
- f.e.e.EncodeNil()
+ e.e.EncodeNil()
return
}
rv = rv.Elem()
}
- v = rv.Interface()
+ v = rv2i(rv)
}
return v, true
}
-func (f *encFnInfo) selferMarshal(rv reflect.Value) {
- if v, proceed := f.getValueForMarshalInterface(rv, f.ti.csIndir); proceed {
- v.(Selfer).CodecEncodeSelf(f.e)
+func (e *Encoder) selferMarshal(f *codecFnInfo, rv reflect.Value) {
+ if v, proceed := e.getValueForMarshalInterface(rv, f.ti.csIndir); proceed {
+ v.(Selfer).CodecEncodeSelf(e)
}
}
-func (f *encFnInfo) binaryMarshal(rv reflect.Value) {
- if v, proceed := f.getValueForMarshalInterface(rv, f.ti.bmIndir); proceed {
+func (e *Encoder) binaryMarshal(f *codecFnInfo, rv reflect.Value) {
+ if v, proceed := e.getValueForMarshalInterface(rv, f.ti.bmIndir); proceed {
bs, fnerr := v.(encoding.BinaryMarshaler).MarshalBinary()
- f.e.marshal(bs, fnerr, false, c_RAW)
+ e.marshal(bs, fnerr, false, c_RAW)
}
}
-func (f *encFnInfo) textMarshal(rv reflect.Value) {
- if v, proceed := f.getValueForMarshalInterface(rv, f.ti.tmIndir); proceed {
- // debugf(">>>> encoding.TextMarshaler: %T", rv.Interface())
+func (e *Encoder) textMarshal(f *codecFnInfo, rv reflect.Value) {
+ if v, proceed := e.getValueForMarshalInterface(rv, f.ti.tmIndir); proceed {
bs, fnerr := v.(encoding.TextMarshaler).MarshalText()
- f.e.marshal(bs, fnerr, false, c_UTF8)
+ e.marshal(bs, fnerr, false, c_UTF8)
}
}
-func (f *encFnInfo) jsonMarshal(rv reflect.Value) {
- if v, proceed := f.getValueForMarshalInterface(rv, f.ti.jmIndir); proceed {
+func (e *Encoder) jsonMarshal(f *codecFnInfo, rv reflect.Value) {
+ if v, proceed := e.getValueForMarshalInterface(rv, f.ti.jmIndir); proceed {
bs, fnerr := v.(jsonMarshaler).MarshalJSON()
- f.e.marshal(bs, fnerr, true, c_UTF8)
+ e.marshal(bs, fnerr, true, c_UTF8)
}
}
-func (f *encFnInfo) kBool(rv reflect.Value) {
- f.e.e.EncodeBool(rv.Bool())
+func (e *Encoder) kBool(f *codecFnInfo, rv reflect.Value) {
+ e.e.EncodeBool(rv.Bool())
}
-func (f *encFnInfo) kString(rv reflect.Value) {
- f.e.e.EncodeString(c_UTF8, rv.String())
+func (e *Encoder) kString(f *codecFnInfo, rv reflect.Value) {
+ e.e.EncodeString(c_UTF8, rv.String())
}
-func (f *encFnInfo) kFloat64(rv reflect.Value) {
- f.e.e.EncodeFloat64(rv.Float())
+func (e *Encoder) kFloat64(f *codecFnInfo, rv reflect.Value) {
+ e.e.EncodeFloat64(rv.Float())
}
-func (f *encFnInfo) kFloat32(rv reflect.Value) {
- f.e.e.EncodeFloat32(float32(rv.Float()))
+func (e *Encoder) kFloat32(f *codecFnInfo, rv reflect.Value) {
+ e.e.EncodeFloat32(float32(rv.Float()))
}
-func (f *encFnInfo) kInt(rv reflect.Value) {
- f.e.e.EncodeInt(rv.Int())
+func (e *Encoder) kInt(f *codecFnInfo, rv reflect.Value) {
+ e.e.EncodeInt(rv.Int())
}
-func (f *encFnInfo) kUint(rv reflect.Value) {
- f.e.e.EncodeUint(rv.Uint())
+func (e *Encoder) kUint(f *codecFnInfo, rv reflect.Value) {
+ e.e.EncodeUint(rv.Uint())
}
-func (f *encFnInfo) kInvalid(rv reflect.Value) {
- f.e.e.EncodeNil()
+func (e *Encoder) kInvalid(f *codecFnInfo, rv reflect.Value) {
+ e.e.EncodeNil()
}
-func (f *encFnInfo) kErr(rv reflect.Value) {
- f.e.errorf("unsupported kind %s, for %#v", rv.Kind(), rv)
+func (e *Encoder) kErr(f *codecFnInfo, rv reflect.Value) {
+ e.errorf("unsupported kind %s, for %#v", rv.Kind(), rv)
}
-func (f *encFnInfo) kSlice(rv reflect.Value) {
+func (e *Encoder) kSlice(f *codecFnInfo, rv reflect.Value) {
ti := f.ti
+ ee := e.e
// array may be non-addressable, so we have to manage with care
// (don't call rv.Bytes, rv.Slice, etc).
// E.g. type struct S{B [2]byte};
// Encode(S{}) will bomb on "panic: slice of unaddressable array".
- e := f.e
if f.seq != seqTypeArray {
if rv.IsNil() {
- e.e.EncodeNil()
+ ee.EncodeNil()
return
}
// If in this method, then there was no extension function defined.
// So it's okay to treat as []byte.
if ti.rtid == uint8SliceTypId {
- e.e.EncodeStringBytes(c_RAW, rv.Bytes())
+ ee.EncodeStringBytes(c_RAW, rv.Bytes())
return
}
}
- cr := e.cr
+ elemsep := e.hh.hasElemSeparators()
rtelem := ti.rt.Elem()
l := rv.Len()
if ti.rtid == uint8SliceTypId || rtelem.Kind() == reflect.Uint8 {
switch f.seq {
case seqTypeArray:
- // if l == 0 { e.e.encodeStringBytes(c_RAW, nil) } else
if rv.CanAddr() {
- e.e.EncodeStringBytes(c_RAW, rv.Slice(0, l).Bytes())
+ ee.EncodeStringBytes(c_RAW, rv.Slice(0, l).Bytes())
} else {
var bs []byte
if l <= cap(e.b) {
@@ -423,27 +526,24 @@ func (f *encFnInfo) kSlice(rv reflect.Value) {
bs = make([]byte, l)
}
reflect.Copy(reflect.ValueOf(bs), rv)
- // TODO: Test that reflect.Copy works instead of manual one-by-one
- // for i := 0; i < l; i++ {
- // bs[i] = byte(rv.Index(i).Uint())
- // }
- e.e.EncodeStringBytes(c_RAW, bs)
+ ee.EncodeStringBytes(c_RAW, bs)
}
+ return
case seqTypeSlice:
- e.e.EncodeStringBytes(c_RAW, rv.Bytes())
- case seqTypeChan:
- bs := e.b[:0]
- // do not use range, so that the number of elements encoded
- // does not change, and encoding does not hang waiting on someone to close chan.
- // for b := range rv.Interface().(<-chan byte) {
- // bs = append(bs, b)
- // }
- ch := rv.Interface().(<-chan byte)
- for i := 0; i < l; i++ {
- bs = append(bs, <-ch)
- }
- e.e.EncodeStringBytes(c_RAW, bs)
+ ee.EncodeStringBytes(c_RAW, rv.Bytes())
+ return
+ }
+ }
+ if ti.rtid == uint8SliceTypId && f.seq == seqTypeChan {
+ bs := e.b[:0]
+ // do not use range, so that the number of elements encoded
+ // does not change, and encoding does not hang waiting on someone to close chan.
+ // for b := range rv2i(rv).(<-chan byte) { bs = append(bs, b) }
+ ch := rv2i(rv).(<-chan byte)
+ for i := 0; i < l; i++ {
+ bs = append(bs, <-ch)
}
+ ee.EncodeStringBytes(c_RAW, bs)
return
}
@@ -452,89 +552,182 @@ func (f *encFnInfo) kSlice(rv reflect.Value) {
e.errorf("mapBySlice requires even slice length, but got %v", l)
return
}
- e.e.EncodeMapStart(l / 2)
+ ee.WriteMapStart(l / 2)
} else {
- e.e.EncodeArrayStart(l)
+ ee.WriteArrayStart(l)
}
if l > 0 {
- for rtelem.Kind() == reflect.Ptr {
- rtelem = rtelem.Elem()
- }
- // if kind is reflect.Interface, do not pre-determine the
- // encoding type, because preEncodeValue may break it down to
- // a concrete type and kInterface will bomb.
- var fn *encFn
- if rtelem.Kind() != reflect.Interface {
- rtelemid := reflect.ValueOf(rtelem).Pointer()
- fn = e.getEncFn(rtelemid, rtelem, true, true)
+ var fn *codecFn
+ var recognizedVtyp = useLookupRecognizedTypes && isRecognizedRtidOrPtr(rt2id(rtelem))
+ if !recognizedVtyp {
+ for rtelem.Kind() == reflect.Ptr {
+ rtelem = rtelem.Elem()
+ }
+ // if kind is reflect.Interface, do not pre-determine the
+ // encoding type, because preEncodeValue may break it down to
+ // a concrete type and kInterface will bomb.
+ if rtelem.Kind() != reflect.Interface {
+ fn = e.cf.get(rtelem, true, true)
+ }
}
// TODO: Consider perf implication of encoding odd index values as symbols if type is string
for j := 0; j < l; j++ {
- if cr != nil {
+ if elemsep {
if ti.mbs {
- if l%2 == 0 {
- cr.sendContainerState(containerMapKey)
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
} else {
- cr.sendContainerState(containerMapValue)
+ ee.WriteMapElemValue()
}
} else {
- cr.sendContainerState(containerArrayElem)
+ ee.WriteArrayElem()
}
}
if f.seq == seqTypeChan {
if rv2, ok2 := rv.Recv(); ok2 {
- e.encodeValue(rv2, fn)
+ if useLookupRecognizedTypes && recognizedVtyp {
+ e.encode(rv2i(rv2))
+ } else {
+ e.encodeValue(rv2, fn, true)
+ }
} else {
- e.encode(nil) // WE HAVE TO DO SOMETHING, so nil if nothing received.
+ ee.EncodeNil() // WE HAVE TO DO SOMETHING, so nil if nothing received.
}
} else {
- e.encodeValue(rv.Index(j), fn)
+ if useLookupRecognizedTypes && recognizedVtyp {
+ e.encode(rv2i(rv.Index(j)))
+ } else {
+ e.encodeValue(rv.Index(j), fn, true)
+ }
}
}
}
- if cr != nil {
- if ti.mbs {
- cr.sendContainerState(containerMapEnd)
+ if ti.mbs {
+ ee.WriteMapEnd()
+ } else {
+ ee.WriteArrayEnd()
+ }
+}
+
+func (e *Encoder) kStructNoOmitempty(f *codecFnInfo, rv reflect.Value) {
+ fti := f.ti
+ elemsep := e.hh.hasElemSeparators()
+ tisfi := fti.sfip
+ toMap := !(fti.toArray || e.h.StructToArray)
+ if toMap {
+ tisfi = fti.sfi
+ }
+ ee := e.e
+
+ sfn := structFieldNode{v: rv, update: false}
+ if toMap {
+ ee.WriteMapStart(len(tisfi))
+ // asSymbols := e.h.AsSymbols&AsSymbolStructFieldNameFlag != 0
+ asSymbols := e.h.AsSymbols == AsSymbolDefault || e.h.AsSymbols&AsSymbolStructFieldNameFlag != 0
+ if !elemsep {
+ for _, si := range tisfi {
+ if asSymbols {
+ ee.EncodeSymbol(si.encName)
+ } else {
+ ee.EncodeString(c_UTF8, si.encName)
+ }
+ e.encodeValue(sfn.field(si), nil, true)
+ }
} else {
- cr.sendContainerState(containerArrayEnd)
+ for _, si := range tisfi {
+ ee.WriteMapElemKey()
+ if asSymbols {
+ ee.EncodeSymbol(si.encName)
+ } else {
+ ee.EncodeString(c_UTF8, si.encName)
+ }
+ ee.WriteMapElemValue()
+ e.encodeValue(sfn.field(si), nil, true)
+ }
}
+ ee.WriteMapEnd()
+ } else {
+ ee.WriteArrayStart(len(tisfi))
+ if !elemsep {
+ for _, si := range tisfi {
+ e.encodeValue(sfn.field(si), nil, true)
+ }
+ } else {
+ for _, si := range tisfi {
+ ee.WriteArrayElem()
+ e.encodeValue(sfn.field(si), nil, true)
+ }
+ }
+ ee.WriteArrayEnd()
}
}
-func (f *encFnInfo) kStruct(rv reflect.Value) {
+func (e *Encoder) kStruct(f *codecFnInfo, rv reflect.Value) {
fti := f.ti
- e := f.e
- cr := e.cr
+ elemsep := e.hh.hasElemSeparators()
tisfi := fti.sfip
toMap := !(fti.toArray || e.h.StructToArray)
+ // if toMap, use the sorted array. If toArray, use unsorted array (to match sequence in struct)
+ if toMap {
+ tisfi = fti.sfi
+ }
newlen := len(fti.sfi)
+ ee := e.e
// Use sync.Pool to reduce allocating slices unnecessarily.
// The cost of sync.Pool is less than the cost of new allocation.
- pool, poolv, fkvs := encStructPoolGet(newlen)
-
- // if toMap, use the sorted array. If toArray, use unsorted array (to match sequence in struct)
- if toMap {
- tisfi = fti.sfi
+ //
+ // Each element of the array pools one of encStructPool(8|16|32|64).
+ // It allows the re-use of slices up to 64 in length.
+ // A performance cost of encoding structs was collecting
+ // which values were empty and should be omitted.
+ // We needed slices of reflect.Value and string to collect them.
+ // This shared pool reduces the amount of unnecessary creation we do.
+ // The cost is that of locking sometimes, but sync.Pool is efficient
+ // enough to reduce thread contention.
+
+ var spool *sync.Pool
+ var poolv interface{}
+ var fkvs []stringRv
+ if newlen <= 8 {
+ spool, poolv = pool.stringRv8()
+ fkvs = poolv.(*[8]stringRv)[:newlen]
+ } else if newlen <= 16 {
+ spool, poolv = pool.stringRv16()
+ fkvs = poolv.(*[16]stringRv)[:newlen]
+ } else if newlen <= 32 {
+ spool, poolv = pool.stringRv32()
+ fkvs = poolv.(*[32]stringRv)[:newlen]
+ } else if newlen <= 64 {
+ spool, poolv = pool.stringRv64()
+ fkvs = poolv.(*[64]stringRv)[:newlen]
+ } else if newlen <= 128 {
+ spool, poolv = pool.stringRv128()
+ fkvs = poolv.(*[128]stringRv)[:newlen]
+ } else {
+ fkvs = make([]stringRv, newlen)
}
+
newlen = 0
var kv stringRv
+ recur := e.h.RecursiveEmptyCheck
+ sfn := structFieldNode{v: rv, update: false}
for _, si := range tisfi {
- kv.r = si.field(rv, false)
+ // kv.r = si.field(rv, false)
+ kv.r = sfn.field(si)
if toMap {
- if si.omitEmpty && isEmptyValue(kv.r) {
+ if si.omitEmpty && isEmptyValue(kv.r, recur, recur) {
continue
}
kv.v = si.encName
} else {
// use the zero value.
// if a reference or struct, set to nil (so you do not output too much)
- if si.omitEmpty && isEmptyValue(kv.r) {
+ if si.omitEmpty && isEmptyValue(kv.r, recur, recur) {
switch kv.r.Kind() {
- case reflect.Struct, reflect.Interface, reflect.Ptr, reflect.Array,
- reflect.Map, reflect.Slice:
+ case reflect.Struct, reflect.Interface, reflect.Ptr, reflect.Array, reflect.Map, reflect.Slice:
kv.r = reflect.Value{} //encode as nil
}
}
@@ -543,88 +736,69 @@ func (f *encFnInfo) kStruct(rv reflect.Value) {
newlen++
}
- // debugf(">>>> kStruct: newlen: %v", newlen)
- // sep := !e.be
- ee := e.e //don't dereference everytime
-
if toMap {
- ee.EncodeMapStart(newlen)
+ ee.WriteMapStart(newlen)
// asSymbols := e.h.AsSymbols&AsSymbolStructFieldNameFlag != 0
asSymbols := e.h.AsSymbols == AsSymbolDefault || e.h.AsSymbols&AsSymbolStructFieldNameFlag != 0
- for j := 0; j < newlen; j++ {
- kv = fkvs[j]
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- if asSymbols {
- ee.EncodeSymbol(kv.v)
- } else {
- ee.EncodeString(c_UTF8, kv.v)
+ if !elemsep {
+ for j := 0; j < newlen; j++ {
+ kv = fkvs[j]
+ if asSymbols {
+ ee.EncodeSymbol(kv.v)
+ } else {
+ ee.EncodeString(c_UTF8, kv.v)
+ }
+ e.encodeValue(kv.r, nil, true)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ } else {
+ for j := 0; j < newlen; j++ {
+ kv = fkvs[j]
+ ee.WriteMapElemKey()
+ if asSymbols {
+ ee.EncodeSymbol(kv.v)
+ } else {
+ ee.EncodeString(c_UTF8, kv.v)
+ }
+ ee.WriteMapElemValue()
+ e.encodeValue(kv.r, nil, true)
}
- e.encodeValue(kv.r, nil)
- }
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
}
+ ee.WriteMapEnd()
} else {
- ee.EncodeArrayStart(newlen)
- for j := 0; j < newlen; j++ {
- kv = fkvs[j]
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ ee.WriteArrayStart(newlen)
+ if !elemsep {
+ for j := 0; j < newlen; j++ {
+ e.encodeValue(fkvs[j].r, nil, true)
+ }
+ } else {
+ for j := 0; j < newlen; j++ {
+ ee.WriteArrayElem()
+ e.encodeValue(fkvs[j].r, nil, true)
}
- e.encodeValue(kv.r, nil)
- }
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
}
+ ee.WriteArrayEnd()
}
// do not use defer. Instead, use explicit pool return at end of function.
// defer has a cost we are trying to avoid.
// If there is a panic and these slices are not returned, it is ok.
- if pool != nil {
- pool.Put(poolv)
+ if spool != nil {
+ spool.Put(poolv)
}
}
-// func (f *encFnInfo) kPtr(rv reflect.Value) {
-// debugf(">>>>>>> ??? encode kPtr called - shouldn't get called")
-// if rv.IsNil() {
-// f.e.e.encodeNil()
-// return
-// }
-// f.e.encodeValue(rv.Elem())
-// }
-
-// func (f *encFnInfo) kInterface(rv reflect.Value) {
-// println("kInterface called")
-// debug.PrintStack()
-// if rv.IsNil() {
-// f.e.e.EncodeNil()
-// return
-// }
-// f.e.encodeValue(rv.Elem(), nil)
-// }
-
-func (f *encFnInfo) kMap(rv reflect.Value) {
- ee := f.e.e
+func (e *Encoder) kMap(f *codecFnInfo, rv reflect.Value) {
+ ee := e.e
if rv.IsNil() {
ee.EncodeNil()
return
}
l := rv.Len()
- ee.EncodeMapStart(l)
- e := f.e
- cr := e.cr
+ ee.WriteMapStart(l)
+ elemsep := e.hh.hasElemSeparators()
if l == 0 {
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
return
}
var asSymbols bool
@@ -635,245 +809,246 @@ func (f *encFnInfo) kMap(rv reflect.Value) {
// However, if kind is reflect.Interface, do not pre-determine the
// encoding type, because preEncodeValue may break it down to
// a concrete type and kInterface will bomb.
- var keyFn, valFn *encFn
+ var keyFn, valFn *codecFn
ti := f.ti
- rtkey := ti.rt.Key()
- rtval := ti.rt.Elem()
- rtkeyid := reflect.ValueOf(rtkey).Pointer()
- // keyTypeIsString := f.ti.rt.Key().Kind() == reflect.String
+ rtkey0 := ti.rt.Key()
+ rtkey := rtkey0
+ rtval0 := ti.rt.Elem()
+ rtval := rtval0
+ rtkeyid := rt2id(rtkey0)
+ rtvalid := rt2id(rtval0)
+ for rtval.Kind() == reflect.Ptr {
+ rtval = rtval.Elem()
+ }
+ if rtval.Kind() != reflect.Interface {
+ valFn = e.cf.get(rtval, true, true)
+ }
+ mks := rv.MapKeys()
+
+ if e.h.Canonical {
+ e.kMapCanonical(rtkey, rv, mks, valFn, asSymbols)
+ ee.WriteMapEnd()
+ return
+ }
+
+ var recognizedKtyp, recognizedVtyp bool
var keyTypeIsString = rtkeyid == stringTypId
if keyTypeIsString {
asSymbols = e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
} else {
+ if useLookupRecognizedTypes {
+ if recognizedKtyp = isRecognizedRtidOrPtr(rtkeyid); recognizedKtyp {
+ goto LABEL1
+ }
+ }
for rtkey.Kind() == reflect.Ptr {
rtkey = rtkey.Elem()
}
if rtkey.Kind() != reflect.Interface {
- rtkeyid = reflect.ValueOf(rtkey).Pointer()
- keyFn = e.getEncFn(rtkeyid, rtkey, true, true)
+ rtkeyid = rt2id(rtkey)
+ keyFn = e.cf.get(rtkey, true, true)
}
}
- for rtval.Kind() == reflect.Ptr {
- rtval = rtval.Elem()
- }
- if rtval.Kind() != reflect.Interface {
- rtvalid := reflect.ValueOf(rtval).Pointer()
- valFn = e.getEncFn(rtvalid, rtval, true, true)
- }
- mks := rv.MapKeys()
- // for j, lmks := 0, len(mks); j < lmks; j++ {
- if e.h.Canonical {
- e.kMapCanonical(rtkeyid, rtkey, rv, mks, valFn, asSymbols)
- } else {
- for j := range mks {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- if keyTypeIsString {
- if asSymbols {
- ee.EncodeSymbol(mks[j].String())
- } else {
- ee.EncodeString(c_UTF8, mks[j].String())
- }
+ // for j, lmks := 0, len(mks); j < lmks; j++ {
+LABEL1:
+ recognizedVtyp = useLookupRecognizedTypes && isRecognizedRtidOrPtr(rtvalid)
+ for j := range mks {
+ if elemsep {
+ ee.WriteMapElemKey()
+ }
+ if keyTypeIsString {
+ if asSymbols {
+ ee.EncodeSymbol(mks[j].String())
} else {
- e.encodeValue(mks[j], keyFn)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ ee.EncodeString(c_UTF8, mks[j].String())
}
- e.encodeValue(rv.MapIndex(mks[j]), valFn)
+ } else if useLookupRecognizedTypes && recognizedKtyp {
+ e.encode(rv2i(mks[j]))
+ } else {
+ e.encodeValue(mks[j], keyFn, true)
+ }
+ if elemsep {
+ ee.WriteMapElemValue()
+ }
+ if useLookupRecognizedTypes && recognizedVtyp {
+ e.encode(rv2i(rv.MapIndex(mks[j])))
+ } else {
+ e.encodeValue(rv.MapIndex(mks[j]), valFn, true)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (e *Encoder) kMapCanonical(rtkeyid uintptr, rtkey reflect.Type, rv reflect.Value, mks []reflect.Value, valFn *encFn, asSymbols bool) {
+func (e *Encoder) kMapCanonical(rtkey reflect.Type, rv reflect.Value, mks []reflect.Value, valFn *codecFn, asSymbols bool) {
ee := e.e
- cr := e.cr
+ elemsep := e.hh.hasElemSeparators()
// we previously did out-of-band if an extension was registered.
// This is not necessary, as the natural kind is sufficient for ordering.
- if rtkeyid == uint8SliceTypId {
- mksv := make([]bytesRv, len(mks))
+ // WHAT IS THIS? rtkeyid can never be a []uint8, per spec
+ // if rtkeyid == uint8SliceTypId {
+ // mksv := make([]bytesRv, len(mks))
+ // for i, k := range mks {
+ // v := &mksv[i]
+ // v.r = k
+ // v.v = k.Bytes()
+ // }
+ // sort.Sort(bytesRvSlice(mksv))
+ // for i := range mksv {
+ // if elemsep {
+ // ee.WriteMapElemKey()
+ // }
+ // ee.EncodeStringBytes(c_RAW, mksv[i].v)
+ // if elemsep {
+ // ee.WriteMapElemValue()
+ // }
+ // e.encodeValue(rv.MapIndex(mksv[i].r), valFn, true)
+ // }
+ // return
+ // }
+
+ switch rtkey.Kind() {
+ case reflect.Bool:
+ mksv := make([]boolRv, len(mks))
for i, k := range mks {
v := &mksv[i]
v.r = k
- v.v = k.Bytes()
+ v.v = k.Bool()
}
- sort.Sort(bytesRvSlice(mksv))
+ sort.Sort(boolRvSlice(mksv))
for i := range mksv {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if elemsep {
+ ee.WriteMapElemKey()
}
- ee.EncodeStringBytes(c_RAW, mksv[i].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ ee.EncodeBool(mksv[i].v)
+ if elemsep {
+ ee.WriteMapElemValue()
}
- e.encodeValue(rv.MapIndex(mksv[i].r), valFn)
+ e.encodeValue(rv.MapIndex(mksv[i].r), valFn, true)
}
- } else {
- switch rtkey.Kind() {
- case reflect.Bool:
- mksv := make([]boolRv, len(mks))
- for i, k := range mks {
- v := &mksv[i]
- v.r = k
- v.v = k.Bool()
- }
- sort.Sort(boolRvSlice(mksv))
- for i := range mksv {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- ee.EncodeBool(mksv[i].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- e.encodeValue(rv.MapIndex(mksv[i].r), valFn)
+ case reflect.String:
+ mksv := make([]stringRv, len(mks))
+ for i, k := range mks {
+ v := &mksv[i]
+ v.r = k
+ v.v = k.String()
+ }
+ sort.Sort(stringRvSlice(mksv))
+ for i := range mksv {
+ if elemsep {
+ ee.WriteMapElemKey()
}
- case reflect.String:
- mksv := make([]stringRv, len(mks))
- for i, k := range mks {
- v := &mksv[i]
- v.r = k
- v.v = k.String()
+ if asSymbols {
+ ee.EncodeSymbol(mksv[i].v)
+ } else {
+ ee.EncodeString(c_UTF8, mksv[i].v)
}
- sort.Sort(stringRvSlice(mksv))
- for i := range mksv {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- if asSymbols {
- ee.EncodeSymbol(mksv[i].v)
- } else {
- ee.EncodeString(c_UTF8, mksv[i].v)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- e.encodeValue(rv.MapIndex(mksv[i].r), valFn)
+ if elemsep {
+ ee.WriteMapElemValue()
}
- case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr:
- mksv := make([]uintRv, len(mks))
- for i, k := range mks {
- v := &mksv[i]
- v.r = k
- v.v = k.Uint()
+ e.encodeValue(rv.MapIndex(mksv[i].r), valFn, true)
+ }
+ case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr:
+ mksv := make([]uintRv, len(mks))
+ for i, k := range mks {
+ v := &mksv[i]
+ v.r = k
+ v.v = k.Uint()
+ }
+ sort.Sort(uintRvSlice(mksv))
+ for i := range mksv {
+ if elemsep {
+ ee.WriteMapElemKey()
}
- sort.Sort(uintRvSlice(mksv))
- for i := range mksv {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- ee.EncodeUint(mksv[i].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- e.encodeValue(rv.MapIndex(mksv[i].r), valFn)
+ ee.EncodeUint(mksv[i].v)
+ if elemsep {
+ ee.WriteMapElemValue()
}
- case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:
- mksv := make([]intRv, len(mks))
- for i, k := range mks {
- v := &mksv[i]
- v.r = k
- v.v = k.Int()
+ e.encodeValue(rv.MapIndex(mksv[i].r), valFn, true)
+ }
+ case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:
+ mksv := make([]intRv, len(mks))
+ for i, k := range mks {
+ v := &mksv[i]
+ v.r = k
+ v.v = k.Int()
+ }
+ sort.Sort(intRvSlice(mksv))
+ for i := range mksv {
+ if elemsep {
+ ee.WriteMapElemKey()
}
- sort.Sort(intRvSlice(mksv))
- for i := range mksv {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- ee.EncodeInt(mksv[i].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- e.encodeValue(rv.MapIndex(mksv[i].r), valFn)
+ ee.EncodeInt(mksv[i].v)
+ if elemsep {
+ ee.WriteMapElemValue()
}
- case reflect.Float32:
- mksv := make([]floatRv, len(mks))
- for i, k := range mks {
- v := &mksv[i]
- v.r = k
- v.v = k.Float()
+ e.encodeValue(rv.MapIndex(mksv[i].r), valFn, true)
+ }
+ case reflect.Float32:
+ mksv := make([]floatRv, len(mks))
+ for i, k := range mks {
+ v := &mksv[i]
+ v.r = k
+ v.v = k.Float()
+ }
+ sort.Sort(floatRvSlice(mksv))
+ for i := range mksv {
+ if elemsep {
+ ee.WriteMapElemKey()
}
- sort.Sort(floatRvSlice(mksv))
- for i := range mksv {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- ee.EncodeFloat32(float32(mksv[i].v))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- e.encodeValue(rv.MapIndex(mksv[i].r), valFn)
+ ee.EncodeFloat32(float32(mksv[i].v))
+ if elemsep {
+ ee.WriteMapElemValue()
}
- case reflect.Float64:
- mksv := make([]floatRv, len(mks))
- for i, k := range mks {
- v := &mksv[i]
- v.r = k
- v.v = k.Float()
+ e.encodeValue(rv.MapIndex(mksv[i].r), valFn, true)
+ }
+ case reflect.Float64:
+ mksv := make([]floatRv, len(mks))
+ for i, k := range mks {
+ v := &mksv[i]
+ v.r = k
+ v.v = k.Float()
+ }
+ sort.Sort(floatRvSlice(mksv))
+ for i := range mksv {
+ if elemsep {
+ ee.WriteMapElemKey()
}
- sort.Sort(floatRvSlice(mksv))
- for i := range mksv {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- ee.EncodeFloat64(mksv[i].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- e.encodeValue(rv.MapIndex(mksv[i].r), valFn)
+ ee.EncodeFloat64(mksv[i].v)
+ if elemsep {
+ ee.WriteMapElemValue()
}
- default:
- // out-of-band
- // first encode each key to a []byte first, then sort them, then record
- var mksv []byte = make([]byte, 0, len(mks)*16) // temporary byte slice for the encoding
- e2 := NewEncoderBytes(&mksv, e.hh)
- mksbv := make([]bytesRv, len(mks))
- for i, k := range mks {
- v := &mksbv[i]
- l := len(mksv)
- e2.MustEncode(k)
- v.r = k
- v.v = mksv[l:]
- // fmt.Printf(">>>>> %s\n", mksv[l:])
+ e.encodeValue(rv.MapIndex(mksv[i].r), valFn, true)
+ }
+ default:
+ // out-of-band
+ // first encode each key to a []byte first, then sort them, then record
+ var mksv []byte = make([]byte, 0, len(mks)*16) // temporary byte slice for the encoding
+ e2 := NewEncoderBytes(&mksv, e.hh)
+ mksbv := make([]bytesRv, len(mks))
+ for i, k := range mks {
+ v := &mksbv[i]
+ l := len(mksv)
+ e2.MustEncode(k)
+ v.r = k
+ v.v = mksv[l:]
+ }
+ sort.Sort(bytesRvSlice(mksbv))
+ for j := range mksbv {
+ if elemsep {
+ ee.WriteMapElemKey()
}
- sort.Sort(bytesRvSlice(mksbv))
- for j := range mksbv {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- e.asis(mksbv[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- e.encodeValue(rv.MapIndex(mksbv[j].r), valFn)
+ e.asis(mksbv[j].v)
+ if elemsep {
+ ee.WriteMapElemValue()
}
+ e.encodeValue(rv.MapIndex(mksbv[j].r), valFn, true)
}
}
}
-// --------------------------------------------------
-
-// encFn encapsulates the captured variables and the encode function.
-// This way, we only do some calculations one times, and pass to the
-// code block that should be called (encapsulated in a function)
-// instead of executing the checks every time.
-type encFn struct {
- i encFnInfo
- f func(*encFnInfo, reflect.Value)
-}
-
-// --------------------------------------------------
-
-type encRtidFn struct {
- rtid uintptr
- fn encFn
-}
+// // --------------------------------------------------
// An Encoder writes an object to an output stream in the codec format.
type Encoder struct {
@@ -881,23 +1056,26 @@ type Encoder struct {
e encDriver
// NOTE: Encoder shouldn't call it's write methods,
// as the handler MAY need to do some coordination.
- w encWriter
- s []encRtidFn
- ci set
- be bool // is binary encoding
- js bool // is json handle
+ w encWriter
+
+ hh Handle
+ h *BasicHandle
+
+ // ---- cpu cache line boundary?
wi ioEncWriter
wb bytesEncWriter
+ bw bufio.Writer
- h *BasicHandle
- hh Handle
-
- cr containerStateRecv
+ // cr containerStateRecv
as encDriverAsis
+ // ---- cpu cache line boundary?
+
+ ci set
+ err error
- f map[uintptr]*encFn
- b [scratchByteArrayLen]byte
+ b [scratchByteArrayLen]byte
+ cf codecFner
}
// NewEncoder returns an Encoder for encoding into an io.Writer.
@@ -922,32 +1100,41 @@ func NewEncoderBytes(out *[]byte, h Handle) *Encoder {
}
func newEncoder(h Handle) *Encoder {
- e := &Encoder{hh: h, h: h.getBasicHandle(), be: h.isBinary()}
- _, e.js = h.(*JsonHandle)
+ e := &Encoder{hh: h, h: h.getBasicHandle()}
e.e = h.newEncDriver(e)
e.as, _ = e.e.(encDriverAsis)
- e.cr, _ = e.e.(containerStateRecv)
+ // e.cr, _ = e.e.(containerStateRecv)
return e
}
// Reset the Encoder with a new output stream.
//
-// This accomodates using the state of the Encoder,
+// This accommodates using the state of the Encoder,
// where it has "cached" information about sub-engines.
func (e *Encoder) Reset(w io.Writer) {
- ww, ok := w.(ioEncWriterWriter)
- if ok {
- e.wi.w = ww
+ var ok bool
+ e.wi.w = w
+ if e.h.WriterBufferSize > 0 {
+ bw := bufio.NewWriterSize(w, e.h.WriterBufferSize)
+ e.bw = *bw
+ e.wi.bw = &e.bw
+ e.wi.sw = &e.bw
+ e.wi.fw = &e.bw
+ e.wi.ww = &e.bw
} else {
- sww := &e.wi.s
- sww.w = w
- sww.bw, _ = w.(io.ByteWriter)
- sww.sw, _ = w.(ioEncStringWriter)
- e.wi.w = sww
- //ww = bufio.NewWriterSize(w, defEncByteBufSize)
+ if e.wi.bw, ok = w.(io.ByteWriter); !ok {
+ e.wi.bw = &e.wi
+ }
+ if e.wi.sw, ok = w.(ioEncStringWriter); !ok {
+ e.wi.sw = &e.wi
+ }
+ e.wi.fw, _ = w.(ioEncFlusher)
+ e.wi.ww = w
}
e.w = &e.wi
e.e.reset()
+ e.cf.reset(e.hh)
+ e.err = nil
}
func (e *Encoder) ResetBytes(out *[]byte) {
@@ -958,14 +1145,10 @@ func (e *Encoder) ResetBytes(out *[]byte) {
e.wb.b, e.wb.out, e.wb.c = in, out, 0
e.w = &e.wb
e.e.reset()
+ e.cf.reset(e.hh)
+ e.err = nil
}
-// func (e *Encoder) sendContainerState(c containerState) {
-// if e.cr != nil {
-// e.cr.sendContainerState(c)
-// }
-// }
-
// Encode writes an object into a stream.
//
// Encoding can be configured via the struct tag for the fields.
@@ -986,6 +1169,8 @@ func (e *Encoder) ResetBytes(out *[]byte) {
// However, struct values may encode as arrays. This happens when:
// - StructToArray Encode option is set, OR
// - the tag on the _struct field sets the "toarray" option
+// Note that omitempty is ignored when encoding struct values as arrays,
+// as an entry must be encoded for each field, to maintain its position.
//
// Values with types that implement MapBySlice are encoded as stream maps.
//
@@ -1012,8 +1197,7 @@ func (e *Encoder) ResetBytes(out *[]byte) {
// }
//
// type MyStruct struct {
-// _struct bool `codec:",omitempty,toarray"` //set omitempty for every field
-// //and encode struct as an array
+// _struct bool `codec:",toarray"` //encode struct as an array
// }
//
// The mode of encoding is based on the type of the value. When a value is seen:
@@ -1026,47 +1210,41 @@ func (e *Encoder) ResetBytes(out *[]byte) {
// Some formats support symbols (e.g. binc) and will properly encode the string
// only once in the stream, and use a tag to refer to it thereafter.
func (e *Encoder) Encode(v interface{}) (err error) {
- defer panicToErr(&err)
- e.encode(v)
- e.w.atEndOfEncode()
+ defer panicToErrs2(&e.err, &err)
+ e.MustEncode(v)
return
}
// MustEncode is like Encode, but panics if unable to Encode.
// This provides insight to the code location that triggered the error.
func (e *Encoder) MustEncode(v interface{}) {
+ if e.err != nil {
+ panic(e.err)
+ }
e.encode(v)
+ e.e.atEndOfEncode()
e.w.atEndOfEncode()
}
-// comment out these (Must)Write methods. They were only put there to support cbor.
-// However, users already have access to the streams, and can write directly.
-//
-// // Write allows users write to the Encoder stream directly.
-// func (e *Encoder) Write(bs []byte) (err error) {
-// defer panicToErr(&err)
-// e.w.writeb(bs)
-// return
-// }
-// // MustWrite is like write, but panics if unable to Write.
-// func (e *Encoder) MustWrite(bs []byte) {
-// e.w.writeb(bs)
-// }
-
func (e *Encoder) encode(iv interface{}) {
- // if ics, ok := iv.(Selfer); ok {
- // ics.CodecEncodeSelf(e)
- // return
- // }
-
- switch v := iv.(type) {
- case nil:
+ if iv == nil || definitelyNil(iv) {
e.e.EncodeNil()
- case Selfer:
+ return
+ }
+ if v, ok := iv.(Selfer); ok {
v.CodecEncodeSelf(e)
+ return
+ }
+ switch v := iv.(type) {
+ // case nil:
+ // e.e.EncodeNil()
+ // case Selfer:
+ // v.CodecEncodeSelf(e)
+ case Raw:
+ e.rawBytes(v)
case reflect.Value:
- e.encodeValue(v, nil)
+ e.encodeValue(v, nil, true)
case string:
e.e.EncodeString(c_UTF8, v)
@@ -1092,6 +1270,8 @@ func (e *Encoder) encode(iv interface{}) {
e.e.EncodeUint(uint64(v))
case uint64:
e.e.EncodeUint(v)
+ case uintptr:
+ e.e.EncodeUint(uint64(v))
case float32:
e.e.EncodeFloat32(v)
case float64:
@@ -1124,6 +1304,8 @@ func (e *Encoder) encode(iv interface{}) {
e.e.EncodeUint(uint64(*v))
case *uint64:
e.e.EncodeUint(*v)
+ case *uintptr:
+ e.e.EncodeUint(uint64(*v))
case *float32:
e.e.EncodeFloat32(*v)
case *float64:
@@ -1133,15 +1315,15 @@ func (e *Encoder) encode(iv interface{}) {
e.e.EncodeStringBytes(c_RAW, *v)
default:
- const checkCodecSelfer1 = true // in case T is passed, where *T is a Selfer, still checkCodecSelfer
if !fastpathEncodeTypeSwitch(iv, e) {
- e.encodeI(iv, false, checkCodecSelfer1)
+ e.encodeValue(reflect.ValueOf(iv), nil, false)
}
}
}
-func (e *Encoder) preEncodeValue(rv reflect.Value) (rv2 reflect.Value, sptr uintptr, proceed bool) {
- // use a goto statement instead of a recursive function for ptr/interface.
+func (e *Encoder) encodeValue(rv reflect.Value, fn *codecFn, checkFastpath bool) {
+ // if a valid fn is passed, it MUST BE for the dereferenced type of rv
+ var sptr uintptr
TOP:
switch rv.Kind() {
case reflect.Ptr:
@@ -1173,164 +1355,26 @@ TOP:
return
}
- proceed = true
- rv2 = rv
- return
-}
-
-func (e *Encoder) doEncodeValue(rv reflect.Value, fn *encFn, sptr uintptr,
- checkFastpath, checkCodecSelfer bool) {
- if sptr != 0 {
- if (&e.ci).add(sptr) {
- e.errorf("circular reference found: # %d", sptr)
- }
+ if sptr != 0 && (&e.ci).add(sptr) {
+ e.errorf("circular reference found: # %d", sptr)
}
+
if fn == nil {
rt := rv.Type()
- rtid := reflect.ValueOf(rt).Pointer()
- fn = e.getEncFn(rtid, rt, true, true)
+ // TODO: calling isRecognizedRtid here is a major slowdown
+ if false && useLookupRecognizedTypes && isRecognizedRtidOrPtr(rt2id(rt)) {
+ e.encode(rv2i(rv))
+ return
+ }
+ // always pass checkCodecSelfer=true, in case T or ****T is passed, where *T is a Selfer
+ fn = e.cf.get(rt, checkFastpath, true)
}
- fn.f(&fn.i, rv)
+ fn.fe(e, &fn.i, rv)
if sptr != 0 {
(&e.ci).remove(sptr)
}
}
-func (e *Encoder) encodeI(iv interface{}, checkFastpath, checkCodecSelfer bool) {
- if rv, sptr, proceed := e.preEncodeValue(reflect.ValueOf(iv)); proceed {
- e.doEncodeValue(rv, nil, sptr, checkFastpath, checkCodecSelfer)
- }
-}
-
-func (e *Encoder) encodeValue(rv reflect.Value, fn *encFn) {
- // if a valid fn is passed, it MUST BE for the dereferenced type of rv
- if rv, sptr, proceed := e.preEncodeValue(rv); proceed {
- e.doEncodeValue(rv, fn, sptr, true, true)
- }
-}
-
-func (e *Encoder) getEncFn(rtid uintptr, rt reflect.Type, checkFastpath, checkCodecSelfer bool) (fn *encFn) {
- // rtid := reflect.ValueOf(rt).Pointer()
- var ok bool
- if useMapForCodecCache {
- fn, ok = e.f[rtid]
- } else {
- for i := range e.s {
- v := &(e.s[i])
- if v.rtid == rtid {
- fn, ok = &(v.fn), true
- break
- }
- }
- }
- if ok {
- return
- }
-
- if useMapForCodecCache {
- if e.f == nil {
- e.f = make(map[uintptr]*encFn, initCollectionCap)
- }
- fn = new(encFn)
- e.f[rtid] = fn
- } else {
- if e.s == nil {
- e.s = make([]encRtidFn, 0, initCollectionCap)
- }
- e.s = append(e.s, encRtidFn{rtid: rtid})
- fn = &(e.s[len(e.s)-1]).fn
- }
-
- ti := e.h.getTypeInfo(rtid, rt)
- fi := &(fn.i)
- fi.e = e
- fi.ti = ti
-
- if checkCodecSelfer && ti.cs {
- fn.f = (*encFnInfo).selferMarshal
- } else if rtid == rawExtTypId {
- fn.f = (*encFnInfo).rawExt
- } else if e.e.IsBuiltinType(rtid) {
- fn.f = (*encFnInfo).builtin
- } else if xfFn := e.h.getExt(rtid); xfFn != nil {
- fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext
- fn.f = (*encFnInfo).ext
- } else if supportMarshalInterfaces && e.be && ti.bm {
- fn.f = (*encFnInfo).binaryMarshal
- } else if supportMarshalInterfaces && !e.be && e.js && ti.jm {
- //If JSON, we should check JSONMarshal before textMarshal
- fn.f = (*encFnInfo).jsonMarshal
- } else if supportMarshalInterfaces && !e.be && ti.tm {
- fn.f = (*encFnInfo).textMarshal
- } else {
- rk := rt.Kind()
- if fastpathEnabled && checkFastpath && (rk == reflect.Map || rk == reflect.Slice) {
- if rt.PkgPath() == "" {
- if idx := fastpathAV.index(rtid); idx != -1 {
- fn.f = fastpathAV[idx].encfn
- }
- } else {
- ok = false
- // use mapping for underlying type if there
- var rtu reflect.Type
- if rk == reflect.Map {
- rtu = reflect.MapOf(rt.Key(), rt.Elem())
- } else {
- rtu = reflect.SliceOf(rt.Elem())
- }
- rtuid := reflect.ValueOf(rtu).Pointer()
- if idx := fastpathAV.index(rtuid); idx != -1 {
- xfnf := fastpathAV[idx].encfn
- xrt := fastpathAV[idx].rt
- fn.f = func(xf *encFnInfo, xrv reflect.Value) {
- xfnf(xf, xrv.Convert(xrt))
- }
- }
- }
- }
- if fn.f == nil {
- switch rk {
- case reflect.Bool:
- fn.f = (*encFnInfo).kBool
- case reflect.String:
- fn.f = (*encFnInfo).kString
- case reflect.Float64:
- fn.f = (*encFnInfo).kFloat64
- case reflect.Float32:
- fn.f = (*encFnInfo).kFloat32
- case reflect.Int, reflect.Int8, reflect.Int64, reflect.Int32, reflect.Int16:
- fn.f = (*encFnInfo).kInt
- case reflect.Uint8, reflect.Uint64, reflect.Uint, reflect.Uint32, reflect.Uint16, reflect.Uintptr:
- fn.f = (*encFnInfo).kUint
- case reflect.Invalid:
- fn.f = (*encFnInfo).kInvalid
- case reflect.Chan:
- fi.seq = seqTypeChan
- fn.f = (*encFnInfo).kSlice
- case reflect.Slice:
- fi.seq = seqTypeSlice
- fn.f = (*encFnInfo).kSlice
- case reflect.Array:
- fi.seq = seqTypeArray
- fn.f = (*encFnInfo).kSlice
- case reflect.Struct:
- fn.f = (*encFnInfo).kStruct
- // reflect.Ptr and reflect.Interface are handled already by preEncodeValue
- // case reflect.Ptr:
- // fn.f = (*encFnInfo).kPtr
- // case reflect.Interface:
- // fn.f = (*encFnInfo).kInterface
- case reflect.Map:
- fn.f = (*encFnInfo).kMap
- default:
- fn.f = (*encFnInfo).kErr
- }
- }
- }
-
- return
-}
-
func (e *Encoder) marshal(bs []byte, fnerr error, asis bool, c charEncoding) {
if fnerr != nil {
panic(fnerr)
@@ -1352,67 +1396,19 @@ func (e *Encoder) asis(v []byte) {
}
}
-func (e *Encoder) errorf(format string, params ...interface{}) {
- err := fmt.Errorf(format, params...)
- panic(err)
-}
-
-// ----------------------------------------
-
-const encStructPoolLen = 5
-
-// encStructPool is an array of sync.Pool.
-// Each element of the array pools one of encStructPool(8|16|32|64).
-// It allows the re-use of slices up to 64 in length.
-// A performance cost of encoding structs was collecting
-// which values were empty and should be omitted.
-// We needed slices of reflect.Value and string to collect them.
-// This shared pool reduces the amount of unnecessary creation we do.
-// The cost is that of locking sometimes, but sync.Pool is efficient
-// enough to reduce thread contention.
-var encStructPool [encStructPoolLen]sync.Pool
-
-func init() {
- encStructPool[0].New = func() interface{} { return new([8]stringRv) }
- encStructPool[1].New = func() interface{} { return new([16]stringRv) }
- encStructPool[2].New = func() interface{} { return new([32]stringRv) }
- encStructPool[3].New = func() interface{} { return new([64]stringRv) }
- encStructPool[4].New = func() interface{} { return new([128]stringRv) }
-}
-
-func encStructPoolGet(newlen int) (p *sync.Pool, v interface{}, s []stringRv) {
- // if encStructPoolLen != 5 { // constant chec, so removed at build time.
- // panic(errors.New("encStructPoolLen must be equal to 4")) // defensive, in case it is changed
- // }
- // idxpool := newlen / 8
- if newlen <= 8 {
- p = &encStructPool[0]
- v = p.Get()
- s = v.(*[8]stringRv)[:newlen]
- } else if newlen <= 16 {
- p = &encStructPool[1]
- v = p.Get()
- s = v.(*[16]stringRv)[:newlen]
- } else if newlen <= 32 {
- p = &encStructPool[2]
- v = p.Get()
- s = v.(*[32]stringRv)[:newlen]
- } else if newlen <= 64 {
- p = &encStructPool[3]
- v = p.Get()
- s = v.(*[64]stringRv)[:newlen]
- } else if newlen <= 128 {
- p = &encStructPool[4]
- v = p.Get()
- s = v.(*[128]stringRv)[:newlen]
+func (e *Encoder) rawBytes(vv Raw) {
+ v := []byte(vv)
+ if !e.h.Raw {
+ e.errorf("Raw values cannot be encoded: %v", v)
+ }
+ if e.as == nil {
+ e.w.writeb(v)
} else {
- s = make([]stringRv, newlen)
+ e.as.EncodeAsis(v)
}
- return
}
-// ----------------------------------------
-
-// func encErr(format string, params ...interface{}) {
-// doPanic(msgTagEnc, format, params...)
-// }
+func (e *Encoder) errorf(format string, params ...interface{}) {
+ err := fmt.Errorf(format, params...)
+ panic(err)
+}
diff --git a/codec/fast-path.generated.go b/codec/fast-path.generated.go
index 5cac047..69b11fc 100644
--- a/codec/fast-path.generated.go
+++ b/codec/fast-path.generated.go
@@ -23,7 +23,7 @@ package codec
// Currently support
// - slice of all builtin types,
// - map of all builtin types to string or interface value
-// - symetrical maps of all builtin types (e.g. str-str, uint8-uint8)
+// - symmetrical maps of all builtin types (e.g. str-str, uint8-uint8)
// This should provide adequate "typical" implementations.
//
// Note that fast track decode functions must handle values for which an address cannot be obtained.
@@ -38,8 +38,7 @@ import (
"sort"
)
-const fastpathCheckNilFalse = false // for reflect
-const fastpathCheckNilTrue = true // for type switch
+const fastpathEnabled = true
type fastpathT struct{}
@@ -48,8 +47,8 @@ var fastpathTV fastpathT
type fastpathE struct {
rtid uintptr
rt reflect.Type
- encfn func(*encFnInfo, reflect.Value)
- decfn func(*decFnInfo, reflect.Value)
+ encfn func(*Encoder, *codecFnInfo, reflect.Value)
+ decfn func(*Decoder, *codecFnInfo, reflect.Value)
}
type fastpathA [271]fastpathE
@@ -81,290 +80,293 @@ var fastpathAV fastpathA
// due to possible initialization loop error, make fastpath in an init()
func init() {
- if !fastpathEnabled {
- return
- }
i := 0
- fn := func(v interface{}, fe func(*encFnInfo, reflect.Value), fd func(*decFnInfo, reflect.Value)) (f fastpathE) {
+ fn := func(v interface{},
+ fe func(*Encoder, *codecFnInfo, reflect.Value),
+ fd func(*Decoder, *codecFnInfo, reflect.Value)) (f fastpathE) {
xrt := reflect.TypeOf(v)
- xptr := reflect.ValueOf(xrt).Pointer()
+ xptr := rt2id(xrt)
+ if useLookupRecognizedTypes {
+ recognizedRtids = append(recognizedRtids, xptr)
+ recognizedRtidPtrs = append(recognizedRtidPtrs, rt2id(reflect.PtrTo(xrt)))
+ }
fastpathAV[i] = fastpathE{xptr, xrt, fe, fd}
i++
return
}
- fn([]interface{}(nil), (*encFnInfo).fastpathEncSliceIntfR, (*decFnInfo).fastpathDecSliceIntfR)
- fn([]string(nil), (*encFnInfo).fastpathEncSliceStringR, (*decFnInfo).fastpathDecSliceStringR)
- fn([]float32(nil), (*encFnInfo).fastpathEncSliceFloat32R, (*decFnInfo).fastpathDecSliceFloat32R)
- fn([]float64(nil), (*encFnInfo).fastpathEncSliceFloat64R, (*decFnInfo).fastpathDecSliceFloat64R)
- fn([]uint(nil), (*encFnInfo).fastpathEncSliceUintR, (*decFnInfo).fastpathDecSliceUintR)
- fn([]uint16(nil), (*encFnInfo).fastpathEncSliceUint16R, (*decFnInfo).fastpathDecSliceUint16R)
- fn([]uint32(nil), (*encFnInfo).fastpathEncSliceUint32R, (*decFnInfo).fastpathDecSliceUint32R)
- fn([]uint64(nil), (*encFnInfo).fastpathEncSliceUint64R, (*decFnInfo).fastpathDecSliceUint64R)
- fn([]uintptr(nil), (*encFnInfo).fastpathEncSliceUintptrR, (*decFnInfo).fastpathDecSliceUintptrR)
- fn([]int(nil), (*encFnInfo).fastpathEncSliceIntR, (*decFnInfo).fastpathDecSliceIntR)
- fn([]int8(nil), (*encFnInfo).fastpathEncSliceInt8R, (*decFnInfo).fastpathDecSliceInt8R)
- fn([]int16(nil), (*encFnInfo).fastpathEncSliceInt16R, (*decFnInfo).fastpathDecSliceInt16R)
- fn([]int32(nil), (*encFnInfo).fastpathEncSliceInt32R, (*decFnInfo).fastpathDecSliceInt32R)
- fn([]int64(nil), (*encFnInfo).fastpathEncSliceInt64R, (*decFnInfo).fastpathDecSliceInt64R)
- fn([]bool(nil), (*encFnInfo).fastpathEncSliceBoolR, (*decFnInfo).fastpathDecSliceBoolR)
-
- fn(map[interface{}]interface{}(nil), (*encFnInfo).fastpathEncMapIntfIntfR, (*decFnInfo).fastpathDecMapIntfIntfR)
- fn(map[interface{}]string(nil), (*encFnInfo).fastpathEncMapIntfStringR, (*decFnInfo).fastpathDecMapIntfStringR)
- fn(map[interface{}]uint(nil), (*encFnInfo).fastpathEncMapIntfUintR, (*decFnInfo).fastpathDecMapIntfUintR)
- fn(map[interface{}]uint8(nil), (*encFnInfo).fastpathEncMapIntfUint8R, (*decFnInfo).fastpathDecMapIntfUint8R)
- fn(map[interface{}]uint16(nil), (*encFnInfo).fastpathEncMapIntfUint16R, (*decFnInfo).fastpathDecMapIntfUint16R)
- fn(map[interface{}]uint32(nil), (*encFnInfo).fastpathEncMapIntfUint32R, (*decFnInfo).fastpathDecMapIntfUint32R)
- fn(map[interface{}]uint64(nil), (*encFnInfo).fastpathEncMapIntfUint64R, (*decFnInfo).fastpathDecMapIntfUint64R)
- fn(map[interface{}]uintptr(nil), (*encFnInfo).fastpathEncMapIntfUintptrR, (*decFnInfo).fastpathDecMapIntfUintptrR)
- fn(map[interface{}]int(nil), (*encFnInfo).fastpathEncMapIntfIntR, (*decFnInfo).fastpathDecMapIntfIntR)
- fn(map[interface{}]int8(nil), (*encFnInfo).fastpathEncMapIntfInt8R, (*decFnInfo).fastpathDecMapIntfInt8R)
- fn(map[interface{}]int16(nil), (*encFnInfo).fastpathEncMapIntfInt16R, (*decFnInfo).fastpathDecMapIntfInt16R)
- fn(map[interface{}]int32(nil), (*encFnInfo).fastpathEncMapIntfInt32R, (*decFnInfo).fastpathDecMapIntfInt32R)
- fn(map[interface{}]int64(nil), (*encFnInfo).fastpathEncMapIntfInt64R, (*decFnInfo).fastpathDecMapIntfInt64R)
- fn(map[interface{}]float32(nil), (*encFnInfo).fastpathEncMapIntfFloat32R, (*decFnInfo).fastpathDecMapIntfFloat32R)
- fn(map[interface{}]float64(nil), (*encFnInfo).fastpathEncMapIntfFloat64R, (*decFnInfo).fastpathDecMapIntfFloat64R)
- fn(map[interface{}]bool(nil), (*encFnInfo).fastpathEncMapIntfBoolR, (*decFnInfo).fastpathDecMapIntfBoolR)
- fn(map[string]interface{}(nil), (*encFnInfo).fastpathEncMapStringIntfR, (*decFnInfo).fastpathDecMapStringIntfR)
- fn(map[string]string(nil), (*encFnInfo).fastpathEncMapStringStringR, (*decFnInfo).fastpathDecMapStringStringR)
- fn(map[string]uint(nil), (*encFnInfo).fastpathEncMapStringUintR, (*decFnInfo).fastpathDecMapStringUintR)
- fn(map[string]uint8(nil), (*encFnInfo).fastpathEncMapStringUint8R, (*decFnInfo).fastpathDecMapStringUint8R)
- fn(map[string]uint16(nil), (*encFnInfo).fastpathEncMapStringUint16R, (*decFnInfo).fastpathDecMapStringUint16R)
- fn(map[string]uint32(nil), (*encFnInfo).fastpathEncMapStringUint32R, (*decFnInfo).fastpathDecMapStringUint32R)
- fn(map[string]uint64(nil), (*encFnInfo).fastpathEncMapStringUint64R, (*decFnInfo).fastpathDecMapStringUint64R)
- fn(map[string]uintptr(nil), (*encFnInfo).fastpathEncMapStringUintptrR, (*decFnInfo).fastpathDecMapStringUintptrR)
- fn(map[string]int(nil), (*encFnInfo).fastpathEncMapStringIntR, (*decFnInfo).fastpathDecMapStringIntR)
- fn(map[string]int8(nil), (*encFnInfo).fastpathEncMapStringInt8R, (*decFnInfo).fastpathDecMapStringInt8R)
- fn(map[string]int16(nil), (*encFnInfo).fastpathEncMapStringInt16R, (*decFnInfo).fastpathDecMapStringInt16R)
- fn(map[string]int32(nil), (*encFnInfo).fastpathEncMapStringInt32R, (*decFnInfo).fastpathDecMapStringInt32R)
- fn(map[string]int64(nil), (*encFnInfo).fastpathEncMapStringInt64R, (*decFnInfo).fastpathDecMapStringInt64R)
- fn(map[string]float32(nil), (*encFnInfo).fastpathEncMapStringFloat32R, (*decFnInfo).fastpathDecMapStringFloat32R)
- fn(map[string]float64(nil), (*encFnInfo).fastpathEncMapStringFloat64R, (*decFnInfo).fastpathDecMapStringFloat64R)
- fn(map[string]bool(nil), (*encFnInfo).fastpathEncMapStringBoolR, (*decFnInfo).fastpathDecMapStringBoolR)
- fn(map[float32]interface{}(nil), (*encFnInfo).fastpathEncMapFloat32IntfR, (*decFnInfo).fastpathDecMapFloat32IntfR)
- fn(map[float32]string(nil), (*encFnInfo).fastpathEncMapFloat32StringR, (*decFnInfo).fastpathDecMapFloat32StringR)
- fn(map[float32]uint(nil), (*encFnInfo).fastpathEncMapFloat32UintR, (*decFnInfo).fastpathDecMapFloat32UintR)
- fn(map[float32]uint8(nil), (*encFnInfo).fastpathEncMapFloat32Uint8R, (*decFnInfo).fastpathDecMapFloat32Uint8R)
- fn(map[float32]uint16(nil), (*encFnInfo).fastpathEncMapFloat32Uint16R, (*decFnInfo).fastpathDecMapFloat32Uint16R)
- fn(map[float32]uint32(nil), (*encFnInfo).fastpathEncMapFloat32Uint32R, (*decFnInfo).fastpathDecMapFloat32Uint32R)
- fn(map[float32]uint64(nil), (*encFnInfo).fastpathEncMapFloat32Uint64R, (*decFnInfo).fastpathDecMapFloat32Uint64R)
- fn(map[float32]uintptr(nil), (*encFnInfo).fastpathEncMapFloat32UintptrR, (*decFnInfo).fastpathDecMapFloat32UintptrR)
- fn(map[float32]int(nil), (*encFnInfo).fastpathEncMapFloat32IntR, (*decFnInfo).fastpathDecMapFloat32IntR)
- fn(map[float32]int8(nil), (*encFnInfo).fastpathEncMapFloat32Int8R, (*decFnInfo).fastpathDecMapFloat32Int8R)
- fn(map[float32]int16(nil), (*encFnInfo).fastpathEncMapFloat32Int16R, (*decFnInfo).fastpathDecMapFloat32Int16R)
- fn(map[float32]int32(nil), (*encFnInfo).fastpathEncMapFloat32Int32R, (*decFnInfo).fastpathDecMapFloat32Int32R)
- fn(map[float32]int64(nil), (*encFnInfo).fastpathEncMapFloat32Int64R, (*decFnInfo).fastpathDecMapFloat32Int64R)
- fn(map[float32]float32(nil), (*encFnInfo).fastpathEncMapFloat32Float32R, (*decFnInfo).fastpathDecMapFloat32Float32R)
- fn(map[float32]float64(nil), (*encFnInfo).fastpathEncMapFloat32Float64R, (*decFnInfo).fastpathDecMapFloat32Float64R)
- fn(map[float32]bool(nil), (*encFnInfo).fastpathEncMapFloat32BoolR, (*decFnInfo).fastpathDecMapFloat32BoolR)
- fn(map[float64]interface{}(nil), (*encFnInfo).fastpathEncMapFloat64IntfR, (*decFnInfo).fastpathDecMapFloat64IntfR)
- fn(map[float64]string(nil), (*encFnInfo).fastpathEncMapFloat64StringR, (*decFnInfo).fastpathDecMapFloat64StringR)
- fn(map[float64]uint(nil), (*encFnInfo).fastpathEncMapFloat64UintR, (*decFnInfo).fastpathDecMapFloat64UintR)
- fn(map[float64]uint8(nil), (*encFnInfo).fastpathEncMapFloat64Uint8R, (*decFnInfo).fastpathDecMapFloat64Uint8R)
- fn(map[float64]uint16(nil), (*encFnInfo).fastpathEncMapFloat64Uint16R, (*decFnInfo).fastpathDecMapFloat64Uint16R)
- fn(map[float64]uint32(nil), (*encFnInfo).fastpathEncMapFloat64Uint32R, (*decFnInfo).fastpathDecMapFloat64Uint32R)
- fn(map[float64]uint64(nil), (*encFnInfo).fastpathEncMapFloat64Uint64R, (*decFnInfo).fastpathDecMapFloat64Uint64R)
- fn(map[float64]uintptr(nil), (*encFnInfo).fastpathEncMapFloat64UintptrR, (*decFnInfo).fastpathDecMapFloat64UintptrR)
- fn(map[float64]int(nil), (*encFnInfo).fastpathEncMapFloat64IntR, (*decFnInfo).fastpathDecMapFloat64IntR)
- fn(map[float64]int8(nil), (*encFnInfo).fastpathEncMapFloat64Int8R, (*decFnInfo).fastpathDecMapFloat64Int8R)
- fn(map[float64]int16(nil), (*encFnInfo).fastpathEncMapFloat64Int16R, (*decFnInfo).fastpathDecMapFloat64Int16R)
- fn(map[float64]int32(nil), (*encFnInfo).fastpathEncMapFloat64Int32R, (*decFnInfo).fastpathDecMapFloat64Int32R)
- fn(map[float64]int64(nil), (*encFnInfo).fastpathEncMapFloat64Int64R, (*decFnInfo).fastpathDecMapFloat64Int64R)
- fn(map[float64]float32(nil), (*encFnInfo).fastpathEncMapFloat64Float32R, (*decFnInfo).fastpathDecMapFloat64Float32R)
- fn(map[float64]float64(nil), (*encFnInfo).fastpathEncMapFloat64Float64R, (*decFnInfo).fastpathDecMapFloat64Float64R)
- fn(map[float64]bool(nil), (*encFnInfo).fastpathEncMapFloat64BoolR, (*decFnInfo).fastpathDecMapFloat64BoolR)
- fn(map[uint]interface{}(nil), (*encFnInfo).fastpathEncMapUintIntfR, (*decFnInfo).fastpathDecMapUintIntfR)
- fn(map[uint]string(nil), (*encFnInfo).fastpathEncMapUintStringR, (*decFnInfo).fastpathDecMapUintStringR)
- fn(map[uint]uint(nil), (*encFnInfo).fastpathEncMapUintUintR, (*decFnInfo).fastpathDecMapUintUintR)
- fn(map[uint]uint8(nil), (*encFnInfo).fastpathEncMapUintUint8R, (*decFnInfo).fastpathDecMapUintUint8R)
- fn(map[uint]uint16(nil), (*encFnInfo).fastpathEncMapUintUint16R, (*decFnInfo).fastpathDecMapUintUint16R)
- fn(map[uint]uint32(nil), (*encFnInfo).fastpathEncMapUintUint32R, (*decFnInfo).fastpathDecMapUintUint32R)
- fn(map[uint]uint64(nil), (*encFnInfo).fastpathEncMapUintUint64R, (*decFnInfo).fastpathDecMapUintUint64R)
- fn(map[uint]uintptr(nil), (*encFnInfo).fastpathEncMapUintUintptrR, (*decFnInfo).fastpathDecMapUintUintptrR)
- fn(map[uint]int(nil), (*encFnInfo).fastpathEncMapUintIntR, (*decFnInfo).fastpathDecMapUintIntR)
- fn(map[uint]int8(nil), (*encFnInfo).fastpathEncMapUintInt8R, (*decFnInfo).fastpathDecMapUintInt8R)
- fn(map[uint]int16(nil), (*encFnInfo).fastpathEncMapUintInt16R, (*decFnInfo).fastpathDecMapUintInt16R)
- fn(map[uint]int32(nil), (*encFnInfo).fastpathEncMapUintInt32R, (*decFnInfo).fastpathDecMapUintInt32R)
- fn(map[uint]int64(nil), (*encFnInfo).fastpathEncMapUintInt64R, (*decFnInfo).fastpathDecMapUintInt64R)
- fn(map[uint]float32(nil), (*encFnInfo).fastpathEncMapUintFloat32R, (*decFnInfo).fastpathDecMapUintFloat32R)
- fn(map[uint]float64(nil), (*encFnInfo).fastpathEncMapUintFloat64R, (*decFnInfo).fastpathDecMapUintFloat64R)
- fn(map[uint]bool(nil), (*encFnInfo).fastpathEncMapUintBoolR, (*decFnInfo).fastpathDecMapUintBoolR)
- fn(map[uint8]interface{}(nil), (*encFnInfo).fastpathEncMapUint8IntfR, (*decFnInfo).fastpathDecMapUint8IntfR)
- fn(map[uint8]string(nil), (*encFnInfo).fastpathEncMapUint8StringR, (*decFnInfo).fastpathDecMapUint8StringR)
- fn(map[uint8]uint(nil), (*encFnInfo).fastpathEncMapUint8UintR, (*decFnInfo).fastpathDecMapUint8UintR)
- fn(map[uint8]uint8(nil), (*encFnInfo).fastpathEncMapUint8Uint8R, (*decFnInfo).fastpathDecMapUint8Uint8R)
- fn(map[uint8]uint16(nil), (*encFnInfo).fastpathEncMapUint8Uint16R, (*decFnInfo).fastpathDecMapUint8Uint16R)
- fn(map[uint8]uint32(nil), (*encFnInfo).fastpathEncMapUint8Uint32R, (*decFnInfo).fastpathDecMapUint8Uint32R)
- fn(map[uint8]uint64(nil), (*encFnInfo).fastpathEncMapUint8Uint64R, (*decFnInfo).fastpathDecMapUint8Uint64R)
- fn(map[uint8]uintptr(nil), (*encFnInfo).fastpathEncMapUint8UintptrR, (*decFnInfo).fastpathDecMapUint8UintptrR)
- fn(map[uint8]int(nil), (*encFnInfo).fastpathEncMapUint8IntR, (*decFnInfo).fastpathDecMapUint8IntR)
- fn(map[uint8]int8(nil), (*encFnInfo).fastpathEncMapUint8Int8R, (*decFnInfo).fastpathDecMapUint8Int8R)
- fn(map[uint8]int16(nil), (*encFnInfo).fastpathEncMapUint8Int16R, (*decFnInfo).fastpathDecMapUint8Int16R)
- fn(map[uint8]int32(nil), (*encFnInfo).fastpathEncMapUint8Int32R, (*decFnInfo).fastpathDecMapUint8Int32R)
- fn(map[uint8]int64(nil), (*encFnInfo).fastpathEncMapUint8Int64R, (*decFnInfo).fastpathDecMapUint8Int64R)
- fn(map[uint8]float32(nil), (*encFnInfo).fastpathEncMapUint8Float32R, (*decFnInfo).fastpathDecMapUint8Float32R)
- fn(map[uint8]float64(nil), (*encFnInfo).fastpathEncMapUint8Float64R, (*decFnInfo).fastpathDecMapUint8Float64R)
- fn(map[uint8]bool(nil), (*encFnInfo).fastpathEncMapUint8BoolR, (*decFnInfo).fastpathDecMapUint8BoolR)
- fn(map[uint16]interface{}(nil), (*encFnInfo).fastpathEncMapUint16IntfR, (*decFnInfo).fastpathDecMapUint16IntfR)
- fn(map[uint16]string(nil), (*encFnInfo).fastpathEncMapUint16StringR, (*decFnInfo).fastpathDecMapUint16StringR)
- fn(map[uint16]uint(nil), (*encFnInfo).fastpathEncMapUint16UintR, (*decFnInfo).fastpathDecMapUint16UintR)
- fn(map[uint16]uint8(nil), (*encFnInfo).fastpathEncMapUint16Uint8R, (*decFnInfo).fastpathDecMapUint16Uint8R)
- fn(map[uint16]uint16(nil), (*encFnInfo).fastpathEncMapUint16Uint16R, (*decFnInfo).fastpathDecMapUint16Uint16R)
- fn(map[uint16]uint32(nil), (*encFnInfo).fastpathEncMapUint16Uint32R, (*decFnInfo).fastpathDecMapUint16Uint32R)
- fn(map[uint16]uint64(nil), (*encFnInfo).fastpathEncMapUint16Uint64R, (*decFnInfo).fastpathDecMapUint16Uint64R)
- fn(map[uint16]uintptr(nil), (*encFnInfo).fastpathEncMapUint16UintptrR, (*decFnInfo).fastpathDecMapUint16UintptrR)
- fn(map[uint16]int(nil), (*encFnInfo).fastpathEncMapUint16IntR, (*decFnInfo).fastpathDecMapUint16IntR)
- fn(map[uint16]int8(nil), (*encFnInfo).fastpathEncMapUint16Int8R, (*decFnInfo).fastpathDecMapUint16Int8R)
- fn(map[uint16]int16(nil), (*encFnInfo).fastpathEncMapUint16Int16R, (*decFnInfo).fastpathDecMapUint16Int16R)
- fn(map[uint16]int32(nil), (*encFnInfo).fastpathEncMapUint16Int32R, (*decFnInfo).fastpathDecMapUint16Int32R)
- fn(map[uint16]int64(nil), (*encFnInfo).fastpathEncMapUint16Int64R, (*decFnInfo).fastpathDecMapUint16Int64R)
- fn(map[uint16]float32(nil), (*encFnInfo).fastpathEncMapUint16Float32R, (*decFnInfo).fastpathDecMapUint16Float32R)
- fn(map[uint16]float64(nil), (*encFnInfo).fastpathEncMapUint16Float64R, (*decFnInfo).fastpathDecMapUint16Float64R)
- fn(map[uint16]bool(nil), (*encFnInfo).fastpathEncMapUint16BoolR, (*decFnInfo).fastpathDecMapUint16BoolR)
- fn(map[uint32]interface{}(nil), (*encFnInfo).fastpathEncMapUint32IntfR, (*decFnInfo).fastpathDecMapUint32IntfR)
- fn(map[uint32]string(nil), (*encFnInfo).fastpathEncMapUint32StringR, (*decFnInfo).fastpathDecMapUint32StringR)
- fn(map[uint32]uint(nil), (*encFnInfo).fastpathEncMapUint32UintR, (*decFnInfo).fastpathDecMapUint32UintR)
- fn(map[uint32]uint8(nil), (*encFnInfo).fastpathEncMapUint32Uint8R, (*decFnInfo).fastpathDecMapUint32Uint8R)
- fn(map[uint32]uint16(nil), (*encFnInfo).fastpathEncMapUint32Uint16R, (*decFnInfo).fastpathDecMapUint32Uint16R)
- fn(map[uint32]uint32(nil), (*encFnInfo).fastpathEncMapUint32Uint32R, (*decFnInfo).fastpathDecMapUint32Uint32R)
- fn(map[uint32]uint64(nil), (*encFnInfo).fastpathEncMapUint32Uint64R, (*decFnInfo).fastpathDecMapUint32Uint64R)
- fn(map[uint32]uintptr(nil), (*encFnInfo).fastpathEncMapUint32UintptrR, (*decFnInfo).fastpathDecMapUint32UintptrR)
- fn(map[uint32]int(nil), (*encFnInfo).fastpathEncMapUint32IntR, (*decFnInfo).fastpathDecMapUint32IntR)
- fn(map[uint32]int8(nil), (*encFnInfo).fastpathEncMapUint32Int8R, (*decFnInfo).fastpathDecMapUint32Int8R)
- fn(map[uint32]int16(nil), (*encFnInfo).fastpathEncMapUint32Int16R, (*decFnInfo).fastpathDecMapUint32Int16R)
- fn(map[uint32]int32(nil), (*encFnInfo).fastpathEncMapUint32Int32R, (*decFnInfo).fastpathDecMapUint32Int32R)
- fn(map[uint32]int64(nil), (*encFnInfo).fastpathEncMapUint32Int64R, (*decFnInfo).fastpathDecMapUint32Int64R)
- fn(map[uint32]float32(nil), (*encFnInfo).fastpathEncMapUint32Float32R, (*decFnInfo).fastpathDecMapUint32Float32R)
- fn(map[uint32]float64(nil), (*encFnInfo).fastpathEncMapUint32Float64R, (*decFnInfo).fastpathDecMapUint32Float64R)
- fn(map[uint32]bool(nil), (*encFnInfo).fastpathEncMapUint32BoolR, (*decFnInfo).fastpathDecMapUint32BoolR)
- fn(map[uint64]interface{}(nil), (*encFnInfo).fastpathEncMapUint64IntfR, (*decFnInfo).fastpathDecMapUint64IntfR)
- fn(map[uint64]string(nil), (*encFnInfo).fastpathEncMapUint64StringR, (*decFnInfo).fastpathDecMapUint64StringR)
- fn(map[uint64]uint(nil), (*encFnInfo).fastpathEncMapUint64UintR, (*decFnInfo).fastpathDecMapUint64UintR)
- fn(map[uint64]uint8(nil), (*encFnInfo).fastpathEncMapUint64Uint8R, (*decFnInfo).fastpathDecMapUint64Uint8R)
- fn(map[uint64]uint16(nil), (*encFnInfo).fastpathEncMapUint64Uint16R, (*decFnInfo).fastpathDecMapUint64Uint16R)
- fn(map[uint64]uint32(nil), (*encFnInfo).fastpathEncMapUint64Uint32R, (*decFnInfo).fastpathDecMapUint64Uint32R)
- fn(map[uint64]uint64(nil), (*encFnInfo).fastpathEncMapUint64Uint64R, (*decFnInfo).fastpathDecMapUint64Uint64R)
- fn(map[uint64]uintptr(nil), (*encFnInfo).fastpathEncMapUint64UintptrR, (*decFnInfo).fastpathDecMapUint64UintptrR)
- fn(map[uint64]int(nil), (*encFnInfo).fastpathEncMapUint64IntR, (*decFnInfo).fastpathDecMapUint64IntR)
- fn(map[uint64]int8(nil), (*encFnInfo).fastpathEncMapUint64Int8R, (*decFnInfo).fastpathDecMapUint64Int8R)
- fn(map[uint64]int16(nil), (*encFnInfo).fastpathEncMapUint64Int16R, (*decFnInfo).fastpathDecMapUint64Int16R)
- fn(map[uint64]int32(nil), (*encFnInfo).fastpathEncMapUint64Int32R, (*decFnInfo).fastpathDecMapUint64Int32R)
- fn(map[uint64]int64(nil), (*encFnInfo).fastpathEncMapUint64Int64R, (*decFnInfo).fastpathDecMapUint64Int64R)
- fn(map[uint64]float32(nil), (*encFnInfo).fastpathEncMapUint64Float32R, (*decFnInfo).fastpathDecMapUint64Float32R)
- fn(map[uint64]float64(nil), (*encFnInfo).fastpathEncMapUint64Float64R, (*decFnInfo).fastpathDecMapUint64Float64R)
- fn(map[uint64]bool(nil), (*encFnInfo).fastpathEncMapUint64BoolR, (*decFnInfo).fastpathDecMapUint64BoolR)
- fn(map[uintptr]interface{}(nil), (*encFnInfo).fastpathEncMapUintptrIntfR, (*decFnInfo).fastpathDecMapUintptrIntfR)
- fn(map[uintptr]string(nil), (*encFnInfo).fastpathEncMapUintptrStringR, (*decFnInfo).fastpathDecMapUintptrStringR)
- fn(map[uintptr]uint(nil), (*encFnInfo).fastpathEncMapUintptrUintR, (*decFnInfo).fastpathDecMapUintptrUintR)
- fn(map[uintptr]uint8(nil), (*encFnInfo).fastpathEncMapUintptrUint8R, (*decFnInfo).fastpathDecMapUintptrUint8R)
- fn(map[uintptr]uint16(nil), (*encFnInfo).fastpathEncMapUintptrUint16R, (*decFnInfo).fastpathDecMapUintptrUint16R)
- fn(map[uintptr]uint32(nil), (*encFnInfo).fastpathEncMapUintptrUint32R, (*decFnInfo).fastpathDecMapUintptrUint32R)
- fn(map[uintptr]uint64(nil), (*encFnInfo).fastpathEncMapUintptrUint64R, (*decFnInfo).fastpathDecMapUintptrUint64R)
- fn(map[uintptr]uintptr(nil), (*encFnInfo).fastpathEncMapUintptrUintptrR, (*decFnInfo).fastpathDecMapUintptrUintptrR)
- fn(map[uintptr]int(nil), (*encFnInfo).fastpathEncMapUintptrIntR, (*decFnInfo).fastpathDecMapUintptrIntR)
- fn(map[uintptr]int8(nil), (*encFnInfo).fastpathEncMapUintptrInt8R, (*decFnInfo).fastpathDecMapUintptrInt8R)
- fn(map[uintptr]int16(nil), (*encFnInfo).fastpathEncMapUintptrInt16R, (*decFnInfo).fastpathDecMapUintptrInt16R)
- fn(map[uintptr]int32(nil), (*encFnInfo).fastpathEncMapUintptrInt32R, (*decFnInfo).fastpathDecMapUintptrInt32R)
- fn(map[uintptr]int64(nil), (*encFnInfo).fastpathEncMapUintptrInt64R, (*decFnInfo).fastpathDecMapUintptrInt64R)
- fn(map[uintptr]float32(nil), (*encFnInfo).fastpathEncMapUintptrFloat32R, (*decFnInfo).fastpathDecMapUintptrFloat32R)
- fn(map[uintptr]float64(nil), (*encFnInfo).fastpathEncMapUintptrFloat64R, (*decFnInfo).fastpathDecMapUintptrFloat64R)
- fn(map[uintptr]bool(nil), (*encFnInfo).fastpathEncMapUintptrBoolR, (*decFnInfo).fastpathDecMapUintptrBoolR)
- fn(map[int]interface{}(nil), (*encFnInfo).fastpathEncMapIntIntfR, (*decFnInfo).fastpathDecMapIntIntfR)
- fn(map[int]string(nil), (*encFnInfo).fastpathEncMapIntStringR, (*decFnInfo).fastpathDecMapIntStringR)
- fn(map[int]uint(nil), (*encFnInfo).fastpathEncMapIntUintR, (*decFnInfo).fastpathDecMapIntUintR)
- fn(map[int]uint8(nil), (*encFnInfo).fastpathEncMapIntUint8R, (*decFnInfo).fastpathDecMapIntUint8R)
- fn(map[int]uint16(nil), (*encFnInfo).fastpathEncMapIntUint16R, (*decFnInfo).fastpathDecMapIntUint16R)
- fn(map[int]uint32(nil), (*encFnInfo).fastpathEncMapIntUint32R, (*decFnInfo).fastpathDecMapIntUint32R)
- fn(map[int]uint64(nil), (*encFnInfo).fastpathEncMapIntUint64R, (*decFnInfo).fastpathDecMapIntUint64R)
- fn(map[int]uintptr(nil), (*encFnInfo).fastpathEncMapIntUintptrR, (*decFnInfo).fastpathDecMapIntUintptrR)
- fn(map[int]int(nil), (*encFnInfo).fastpathEncMapIntIntR, (*decFnInfo).fastpathDecMapIntIntR)
- fn(map[int]int8(nil), (*encFnInfo).fastpathEncMapIntInt8R, (*decFnInfo).fastpathDecMapIntInt8R)
- fn(map[int]int16(nil), (*encFnInfo).fastpathEncMapIntInt16R, (*decFnInfo).fastpathDecMapIntInt16R)
- fn(map[int]int32(nil), (*encFnInfo).fastpathEncMapIntInt32R, (*decFnInfo).fastpathDecMapIntInt32R)
- fn(map[int]int64(nil), (*encFnInfo).fastpathEncMapIntInt64R, (*decFnInfo).fastpathDecMapIntInt64R)
- fn(map[int]float32(nil), (*encFnInfo).fastpathEncMapIntFloat32R, (*decFnInfo).fastpathDecMapIntFloat32R)
- fn(map[int]float64(nil), (*encFnInfo).fastpathEncMapIntFloat64R, (*decFnInfo).fastpathDecMapIntFloat64R)
- fn(map[int]bool(nil), (*encFnInfo).fastpathEncMapIntBoolR, (*decFnInfo).fastpathDecMapIntBoolR)
- fn(map[int8]interface{}(nil), (*encFnInfo).fastpathEncMapInt8IntfR, (*decFnInfo).fastpathDecMapInt8IntfR)
- fn(map[int8]string(nil), (*encFnInfo).fastpathEncMapInt8StringR, (*decFnInfo).fastpathDecMapInt8StringR)
- fn(map[int8]uint(nil), (*encFnInfo).fastpathEncMapInt8UintR, (*decFnInfo).fastpathDecMapInt8UintR)
- fn(map[int8]uint8(nil), (*encFnInfo).fastpathEncMapInt8Uint8R, (*decFnInfo).fastpathDecMapInt8Uint8R)
- fn(map[int8]uint16(nil), (*encFnInfo).fastpathEncMapInt8Uint16R, (*decFnInfo).fastpathDecMapInt8Uint16R)
- fn(map[int8]uint32(nil), (*encFnInfo).fastpathEncMapInt8Uint32R, (*decFnInfo).fastpathDecMapInt8Uint32R)
- fn(map[int8]uint64(nil), (*encFnInfo).fastpathEncMapInt8Uint64R, (*decFnInfo).fastpathDecMapInt8Uint64R)
- fn(map[int8]uintptr(nil), (*encFnInfo).fastpathEncMapInt8UintptrR, (*decFnInfo).fastpathDecMapInt8UintptrR)
- fn(map[int8]int(nil), (*encFnInfo).fastpathEncMapInt8IntR, (*decFnInfo).fastpathDecMapInt8IntR)
- fn(map[int8]int8(nil), (*encFnInfo).fastpathEncMapInt8Int8R, (*decFnInfo).fastpathDecMapInt8Int8R)
- fn(map[int8]int16(nil), (*encFnInfo).fastpathEncMapInt8Int16R, (*decFnInfo).fastpathDecMapInt8Int16R)
- fn(map[int8]int32(nil), (*encFnInfo).fastpathEncMapInt8Int32R, (*decFnInfo).fastpathDecMapInt8Int32R)
- fn(map[int8]int64(nil), (*encFnInfo).fastpathEncMapInt8Int64R, (*decFnInfo).fastpathDecMapInt8Int64R)
- fn(map[int8]float32(nil), (*encFnInfo).fastpathEncMapInt8Float32R, (*decFnInfo).fastpathDecMapInt8Float32R)
- fn(map[int8]float64(nil), (*encFnInfo).fastpathEncMapInt8Float64R, (*decFnInfo).fastpathDecMapInt8Float64R)
- fn(map[int8]bool(nil), (*encFnInfo).fastpathEncMapInt8BoolR, (*decFnInfo).fastpathDecMapInt8BoolR)
- fn(map[int16]interface{}(nil), (*encFnInfo).fastpathEncMapInt16IntfR, (*decFnInfo).fastpathDecMapInt16IntfR)
- fn(map[int16]string(nil), (*encFnInfo).fastpathEncMapInt16StringR, (*decFnInfo).fastpathDecMapInt16StringR)
- fn(map[int16]uint(nil), (*encFnInfo).fastpathEncMapInt16UintR, (*decFnInfo).fastpathDecMapInt16UintR)
- fn(map[int16]uint8(nil), (*encFnInfo).fastpathEncMapInt16Uint8R, (*decFnInfo).fastpathDecMapInt16Uint8R)
- fn(map[int16]uint16(nil), (*encFnInfo).fastpathEncMapInt16Uint16R, (*decFnInfo).fastpathDecMapInt16Uint16R)
- fn(map[int16]uint32(nil), (*encFnInfo).fastpathEncMapInt16Uint32R, (*decFnInfo).fastpathDecMapInt16Uint32R)
- fn(map[int16]uint64(nil), (*encFnInfo).fastpathEncMapInt16Uint64R, (*decFnInfo).fastpathDecMapInt16Uint64R)
- fn(map[int16]uintptr(nil), (*encFnInfo).fastpathEncMapInt16UintptrR, (*decFnInfo).fastpathDecMapInt16UintptrR)
- fn(map[int16]int(nil), (*encFnInfo).fastpathEncMapInt16IntR, (*decFnInfo).fastpathDecMapInt16IntR)
- fn(map[int16]int8(nil), (*encFnInfo).fastpathEncMapInt16Int8R, (*decFnInfo).fastpathDecMapInt16Int8R)
- fn(map[int16]int16(nil), (*encFnInfo).fastpathEncMapInt16Int16R, (*decFnInfo).fastpathDecMapInt16Int16R)
- fn(map[int16]int32(nil), (*encFnInfo).fastpathEncMapInt16Int32R, (*decFnInfo).fastpathDecMapInt16Int32R)
- fn(map[int16]int64(nil), (*encFnInfo).fastpathEncMapInt16Int64R, (*decFnInfo).fastpathDecMapInt16Int64R)
- fn(map[int16]float32(nil), (*encFnInfo).fastpathEncMapInt16Float32R, (*decFnInfo).fastpathDecMapInt16Float32R)
- fn(map[int16]float64(nil), (*encFnInfo).fastpathEncMapInt16Float64R, (*decFnInfo).fastpathDecMapInt16Float64R)
- fn(map[int16]bool(nil), (*encFnInfo).fastpathEncMapInt16BoolR, (*decFnInfo).fastpathDecMapInt16BoolR)
- fn(map[int32]interface{}(nil), (*encFnInfo).fastpathEncMapInt32IntfR, (*decFnInfo).fastpathDecMapInt32IntfR)
- fn(map[int32]string(nil), (*encFnInfo).fastpathEncMapInt32StringR, (*decFnInfo).fastpathDecMapInt32StringR)
- fn(map[int32]uint(nil), (*encFnInfo).fastpathEncMapInt32UintR, (*decFnInfo).fastpathDecMapInt32UintR)
- fn(map[int32]uint8(nil), (*encFnInfo).fastpathEncMapInt32Uint8R, (*decFnInfo).fastpathDecMapInt32Uint8R)
- fn(map[int32]uint16(nil), (*encFnInfo).fastpathEncMapInt32Uint16R, (*decFnInfo).fastpathDecMapInt32Uint16R)
- fn(map[int32]uint32(nil), (*encFnInfo).fastpathEncMapInt32Uint32R, (*decFnInfo).fastpathDecMapInt32Uint32R)
- fn(map[int32]uint64(nil), (*encFnInfo).fastpathEncMapInt32Uint64R, (*decFnInfo).fastpathDecMapInt32Uint64R)
- fn(map[int32]uintptr(nil), (*encFnInfo).fastpathEncMapInt32UintptrR, (*decFnInfo).fastpathDecMapInt32UintptrR)
- fn(map[int32]int(nil), (*encFnInfo).fastpathEncMapInt32IntR, (*decFnInfo).fastpathDecMapInt32IntR)
- fn(map[int32]int8(nil), (*encFnInfo).fastpathEncMapInt32Int8R, (*decFnInfo).fastpathDecMapInt32Int8R)
- fn(map[int32]int16(nil), (*encFnInfo).fastpathEncMapInt32Int16R, (*decFnInfo).fastpathDecMapInt32Int16R)
- fn(map[int32]int32(nil), (*encFnInfo).fastpathEncMapInt32Int32R, (*decFnInfo).fastpathDecMapInt32Int32R)
- fn(map[int32]int64(nil), (*encFnInfo).fastpathEncMapInt32Int64R, (*decFnInfo).fastpathDecMapInt32Int64R)
- fn(map[int32]float32(nil), (*encFnInfo).fastpathEncMapInt32Float32R, (*decFnInfo).fastpathDecMapInt32Float32R)
- fn(map[int32]float64(nil), (*encFnInfo).fastpathEncMapInt32Float64R, (*decFnInfo).fastpathDecMapInt32Float64R)
- fn(map[int32]bool(nil), (*encFnInfo).fastpathEncMapInt32BoolR, (*decFnInfo).fastpathDecMapInt32BoolR)
- fn(map[int64]interface{}(nil), (*encFnInfo).fastpathEncMapInt64IntfR, (*decFnInfo).fastpathDecMapInt64IntfR)
- fn(map[int64]string(nil), (*encFnInfo).fastpathEncMapInt64StringR, (*decFnInfo).fastpathDecMapInt64StringR)
- fn(map[int64]uint(nil), (*encFnInfo).fastpathEncMapInt64UintR, (*decFnInfo).fastpathDecMapInt64UintR)
- fn(map[int64]uint8(nil), (*encFnInfo).fastpathEncMapInt64Uint8R, (*decFnInfo).fastpathDecMapInt64Uint8R)
- fn(map[int64]uint16(nil), (*encFnInfo).fastpathEncMapInt64Uint16R, (*decFnInfo).fastpathDecMapInt64Uint16R)
- fn(map[int64]uint32(nil), (*encFnInfo).fastpathEncMapInt64Uint32R, (*decFnInfo).fastpathDecMapInt64Uint32R)
- fn(map[int64]uint64(nil), (*encFnInfo).fastpathEncMapInt64Uint64R, (*decFnInfo).fastpathDecMapInt64Uint64R)
- fn(map[int64]uintptr(nil), (*encFnInfo).fastpathEncMapInt64UintptrR, (*decFnInfo).fastpathDecMapInt64UintptrR)
- fn(map[int64]int(nil), (*encFnInfo).fastpathEncMapInt64IntR, (*decFnInfo).fastpathDecMapInt64IntR)
- fn(map[int64]int8(nil), (*encFnInfo).fastpathEncMapInt64Int8R, (*decFnInfo).fastpathDecMapInt64Int8R)
- fn(map[int64]int16(nil), (*encFnInfo).fastpathEncMapInt64Int16R, (*decFnInfo).fastpathDecMapInt64Int16R)
- fn(map[int64]int32(nil), (*encFnInfo).fastpathEncMapInt64Int32R, (*decFnInfo).fastpathDecMapInt64Int32R)
- fn(map[int64]int64(nil), (*encFnInfo).fastpathEncMapInt64Int64R, (*decFnInfo).fastpathDecMapInt64Int64R)
- fn(map[int64]float32(nil), (*encFnInfo).fastpathEncMapInt64Float32R, (*decFnInfo).fastpathDecMapInt64Float32R)
- fn(map[int64]float64(nil), (*encFnInfo).fastpathEncMapInt64Float64R, (*decFnInfo).fastpathDecMapInt64Float64R)
- fn(map[int64]bool(nil), (*encFnInfo).fastpathEncMapInt64BoolR, (*decFnInfo).fastpathDecMapInt64BoolR)
- fn(map[bool]interface{}(nil), (*encFnInfo).fastpathEncMapBoolIntfR, (*decFnInfo).fastpathDecMapBoolIntfR)
- fn(map[bool]string(nil), (*encFnInfo).fastpathEncMapBoolStringR, (*decFnInfo).fastpathDecMapBoolStringR)
- fn(map[bool]uint(nil), (*encFnInfo).fastpathEncMapBoolUintR, (*decFnInfo).fastpathDecMapBoolUintR)
- fn(map[bool]uint8(nil), (*encFnInfo).fastpathEncMapBoolUint8R, (*decFnInfo).fastpathDecMapBoolUint8R)
- fn(map[bool]uint16(nil), (*encFnInfo).fastpathEncMapBoolUint16R, (*decFnInfo).fastpathDecMapBoolUint16R)
- fn(map[bool]uint32(nil), (*encFnInfo).fastpathEncMapBoolUint32R, (*decFnInfo).fastpathDecMapBoolUint32R)
- fn(map[bool]uint64(nil), (*encFnInfo).fastpathEncMapBoolUint64R, (*decFnInfo).fastpathDecMapBoolUint64R)
- fn(map[bool]uintptr(nil), (*encFnInfo).fastpathEncMapBoolUintptrR, (*decFnInfo).fastpathDecMapBoolUintptrR)
- fn(map[bool]int(nil), (*encFnInfo).fastpathEncMapBoolIntR, (*decFnInfo).fastpathDecMapBoolIntR)
- fn(map[bool]int8(nil), (*encFnInfo).fastpathEncMapBoolInt8R, (*decFnInfo).fastpathDecMapBoolInt8R)
- fn(map[bool]int16(nil), (*encFnInfo).fastpathEncMapBoolInt16R, (*decFnInfo).fastpathDecMapBoolInt16R)
- fn(map[bool]int32(nil), (*encFnInfo).fastpathEncMapBoolInt32R, (*decFnInfo).fastpathDecMapBoolInt32R)
- fn(map[bool]int64(nil), (*encFnInfo).fastpathEncMapBoolInt64R, (*decFnInfo).fastpathDecMapBoolInt64R)
- fn(map[bool]float32(nil), (*encFnInfo).fastpathEncMapBoolFloat32R, (*decFnInfo).fastpathDecMapBoolFloat32R)
- fn(map[bool]float64(nil), (*encFnInfo).fastpathEncMapBoolFloat64R, (*decFnInfo).fastpathDecMapBoolFloat64R)
- fn(map[bool]bool(nil), (*encFnInfo).fastpathEncMapBoolBoolR, (*decFnInfo).fastpathDecMapBoolBoolR)
+ fn([]interface{}(nil), (*Encoder).fastpathEncSliceIntfR, (*Decoder).fastpathDecSliceIntfR)
+ fn([]string(nil), (*Encoder).fastpathEncSliceStringR, (*Decoder).fastpathDecSliceStringR)
+ fn([]float32(nil), (*Encoder).fastpathEncSliceFloat32R, (*Decoder).fastpathDecSliceFloat32R)
+ fn([]float64(nil), (*Encoder).fastpathEncSliceFloat64R, (*Decoder).fastpathDecSliceFloat64R)
+ fn([]uint(nil), (*Encoder).fastpathEncSliceUintR, (*Decoder).fastpathDecSliceUintR)
+ fn([]uint16(nil), (*Encoder).fastpathEncSliceUint16R, (*Decoder).fastpathDecSliceUint16R)
+ fn([]uint32(nil), (*Encoder).fastpathEncSliceUint32R, (*Decoder).fastpathDecSliceUint32R)
+ fn([]uint64(nil), (*Encoder).fastpathEncSliceUint64R, (*Decoder).fastpathDecSliceUint64R)
+ fn([]uintptr(nil), (*Encoder).fastpathEncSliceUintptrR, (*Decoder).fastpathDecSliceUintptrR)
+ fn([]int(nil), (*Encoder).fastpathEncSliceIntR, (*Decoder).fastpathDecSliceIntR)
+ fn([]int8(nil), (*Encoder).fastpathEncSliceInt8R, (*Decoder).fastpathDecSliceInt8R)
+ fn([]int16(nil), (*Encoder).fastpathEncSliceInt16R, (*Decoder).fastpathDecSliceInt16R)
+ fn([]int32(nil), (*Encoder).fastpathEncSliceInt32R, (*Decoder).fastpathDecSliceInt32R)
+ fn([]int64(nil), (*Encoder).fastpathEncSliceInt64R, (*Decoder).fastpathDecSliceInt64R)
+ fn([]bool(nil), (*Encoder).fastpathEncSliceBoolR, (*Decoder).fastpathDecSliceBoolR)
+
+ fn(map[interface{}]interface{}(nil), (*Encoder).fastpathEncMapIntfIntfR, (*Decoder).fastpathDecMapIntfIntfR)
+ fn(map[interface{}]string(nil), (*Encoder).fastpathEncMapIntfStringR, (*Decoder).fastpathDecMapIntfStringR)
+ fn(map[interface{}]uint(nil), (*Encoder).fastpathEncMapIntfUintR, (*Decoder).fastpathDecMapIntfUintR)
+ fn(map[interface{}]uint8(nil), (*Encoder).fastpathEncMapIntfUint8R, (*Decoder).fastpathDecMapIntfUint8R)
+ fn(map[interface{}]uint16(nil), (*Encoder).fastpathEncMapIntfUint16R, (*Decoder).fastpathDecMapIntfUint16R)
+ fn(map[interface{}]uint32(nil), (*Encoder).fastpathEncMapIntfUint32R, (*Decoder).fastpathDecMapIntfUint32R)
+ fn(map[interface{}]uint64(nil), (*Encoder).fastpathEncMapIntfUint64R, (*Decoder).fastpathDecMapIntfUint64R)
+ fn(map[interface{}]uintptr(nil), (*Encoder).fastpathEncMapIntfUintptrR, (*Decoder).fastpathDecMapIntfUintptrR)
+ fn(map[interface{}]int(nil), (*Encoder).fastpathEncMapIntfIntR, (*Decoder).fastpathDecMapIntfIntR)
+ fn(map[interface{}]int8(nil), (*Encoder).fastpathEncMapIntfInt8R, (*Decoder).fastpathDecMapIntfInt8R)
+ fn(map[interface{}]int16(nil), (*Encoder).fastpathEncMapIntfInt16R, (*Decoder).fastpathDecMapIntfInt16R)
+ fn(map[interface{}]int32(nil), (*Encoder).fastpathEncMapIntfInt32R, (*Decoder).fastpathDecMapIntfInt32R)
+ fn(map[interface{}]int64(nil), (*Encoder).fastpathEncMapIntfInt64R, (*Decoder).fastpathDecMapIntfInt64R)
+ fn(map[interface{}]float32(nil), (*Encoder).fastpathEncMapIntfFloat32R, (*Decoder).fastpathDecMapIntfFloat32R)
+ fn(map[interface{}]float64(nil), (*Encoder).fastpathEncMapIntfFloat64R, (*Decoder).fastpathDecMapIntfFloat64R)
+ fn(map[interface{}]bool(nil), (*Encoder).fastpathEncMapIntfBoolR, (*Decoder).fastpathDecMapIntfBoolR)
+ fn(map[string]interface{}(nil), (*Encoder).fastpathEncMapStringIntfR, (*Decoder).fastpathDecMapStringIntfR)
+ fn(map[string]string(nil), (*Encoder).fastpathEncMapStringStringR, (*Decoder).fastpathDecMapStringStringR)
+ fn(map[string]uint(nil), (*Encoder).fastpathEncMapStringUintR, (*Decoder).fastpathDecMapStringUintR)
+ fn(map[string]uint8(nil), (*Encoder).fastpathEncMapStringUint8R, (*Decoder).fastpathDecMapStringUint8R)
+ fn(map[string]uint16(nil), (*Encoder).fastpathEncMapStringUint16R, (*Decoder).fastpathDecMapStringUint16R)
+ fn(map[string]uint32(nil), (*Encoder).fastpathEncMapStringUint32R, (*Decoder).fastpathDecMapStringUint32R)
+ fn(map[string]uint64(nil), (*Encoder).fastpathEncMapStringUint64R, (*Decoder).fastpathDecMapStringUint64R)
+ fn(map[string]uintptr(nil), (*Encoder).fastpathEncMapStringUintptrR, (*Decoder).fastpathDecMapStringUintptrR)
+ fn(map[string]int(nil), (*Encoder).fastpathEncMapStringIntR, (*Decoder).fastpathDecMapStringIntR)
+ fn(map[string]int8(nil), (*Encoder).fastpathEncMapStringInt8R, (*Decoder).fastpathDecMapStringInt8R)
+ fn(map[string]int16(nil), (*Encoder).fastpathEncMapStringInt16R, (*Decoder).fastpathDecMapStringInt16R)
+ fn(map[string]int32(nil), (*Encoder).fastpathEncMapStringInt32R, (*Decoder).fastpathDecMapStringInt32R)
+ fn(map[string]int64(nil), (*Encoder).fastpathEncMapStringInt64R, (*Decoder).fastpathDecMapStringInt64R)
+ fn(map[string]float32(nil), (*Encoder).fastpathEncMapStringFloat32R, (*Decoder).fastpathDecMapStringFloat32R)
+ fn(map[string]float64(nil), (*Encoder).fastpathEncMapStringFloat64R, (*Decoder).fastpathDecMapStringFloat64R)
+ fn(map[string]bool(nil), (*Encoder).fastpathEncMapStringBoolR, (*Decoder).fastpathDecMapStringBoolR)
+ fn(map[float32]interface{}(nil), (*Encoder).fastpathEncMapFloat32IntfR, (*Decoder).fastpathDecMapFloat32IntfR)
+ fn(map[float32]string(nil), (*Encoder).fastpathEncMapFloat32StringR, (*Decoder).fastpathDecMapFloat32StringR)
+ fn(map[float32]uint(nil), (*Encoder).fastpathEncMapFloat32UintR, (*Decoder).fastpathDecMapFloat32UintR)
+ fn(map[float32]uint8(nil), (*Encoder).fastpathEncMapFloat32Uint8R, (*Decoder).fastpathDecMapFloat32Uint8R)
+ fn(map[float32]uint16(nil), (*Encoder).fastpathEncMapFloat32Uint16R, (*Decoder).fastpathDecMapFloat32Uint16R)
+ fn(map[float32]uint32(nil), (*Encoder).fastpathEncMapFloat32Uint32R, (*Decoder).fastpathDecMapFloat32Uint32R)
+ fn(map[float32]uint64(nil), (*Encoder).fastpathEncMapFloat32Uint64R, (*Decoder).fastpathDecMapFloat32Uint64R)
+ fn(map[float32]uintptr(nil), (*Encoder).fastpathEncMapFloat32UintptrR, (*Decoder).fastpathDecMapFloat32UintptrR)
+ fn(map[float32]int(nil), (*Encoder).fastpathEncMapFloat32IntR, (*Decoder).fastpathDecMapFloat32IntR)
+ fn(map[float32]int8(nil), (*Encoder).fastpathEncMapFloat32Int8R, (*Decoder).fastpathDecMapFloat32Int8R)
+ fn(map[float32]int16(nil), (*Encoder).fastpathEncMapFloat32Int16R, (*Decoder).fastpathDecMapFloat32Int16R)
+ fn(map[float32]int32(nil), (*Encoder).fastpathEncMapFloat32Int32R, (*Decoder).fastpathDecMapFloat32Int32R)
+ fn(map[float32]int64(nil), (*Encoder).fastpathEncMapFloat32Int64R, (*Decoder).fastpathDecMapFloat32Int64R)
+ fn(map[float32]float32(nil), (*Encoder).fastpathEncMapFloat32Float32R, (*Decoder).fastpathDecMapFloat32Float32R)
+ fn(map[float32]float64(nil), (*Encoder).fastpathEncMapFloat32Float64R, (*Decoder).fastpathDecMapFloat32Float64R)
+ fn(map[float32]bool(nil), (*Encoder).fastpathEncMapFloat32BoolR, (*Decoder).fastpathDecMapFloat32BoolR)
+ fn(map[float64]interface{}(nil), (*Encoder).fastpathEncMapFloat64IntfR, (*Decoder).fastpathDecMapFloat64IntfR)
+ fn(map[float64]string(nil), (*Encoder).fastpathEncMapFloat64StringR, (*Decoder).fastpathDecMapFloat64StringR)
+ fn(map[float64]uint(nil), (*Encoder).fastpathEncMapFloat64UintR, (*Decoder).fastpathDecMapFloat64UintR)
+ fn(map[float64]uint8(nil), (*Encoder).fastpathEncMapFloat64Uint8R, (*Decoder).fastpathDecMapFloat64Uint8R)
+ fn(map[float64]uint16(nil), (*Encoder).fastpathEncMapFloat64Uint16R, (*Decoder).fastpathDecMapFloat64Uint16R)
+ fn(map[float64]uint32(nil), (*Encoder).fastpathEncMapFloat64Uint32R, (*Decoder).fastpathDecMapFloat64Uint32R)
+ fn(map[float64]uint64(nil), (*Encoder).fastpathEncMapFloat64Uint64R, (*Decoder).fastpathDecMapFloat64Uint64R)
+ fn(map[float64]uintptr(nil), (*Encoder).fastpathEncMapFloat64UintptrR, (*Decoder).fastpathDecMapFloat64UintptrR)
+ fn(map[float64]int(nil), (*Encoder).fastpathEncMapFloat64IntR, (*Decoder).fastpathDecMapFloat64IntR)
+ fn(map[float64]int8(nil), (*Encoder).fastpathEncMapFloat64Int8R, (*Decoder).fastpathDecMapFloat64Int8R)
+ fn(map[float64]int16(nil), (*Encoder).fastpathEncMapFloat64Int16R, (*Decoder).fastpathDecMapFloat64Int16R)
+ fn(map[float64]int32(nil), (*Encoder).fastpathEncMapFloat64Int32R, (*Decoder).fastpathDecMapFloat64Int32R)
+ fn(map[float64]int64(nil), (*Encoder).fastpathEncMapFloat64Int64R, (*Decoder).fastpathDecMapFloat64Int64R)
+ fn(map[float64]float32(nil), (*Encoder).fastpathEncMapFloat64Float32R, (*Decoder).fastpathDecMapFloat64Float32R)
+ fn(map[float64]float64(nil), (*Encoder).fastpathEncMapFloat64Float64R, (*Decoder).fastpathDecMapFloat64Float64R)
+ fn(map[float64]bool(nil), (*Encoder).fastpathEncMapFloat64BoolR, (*Decoder).fastpathDecMapFloat64BoolR)
+ fn(map[uint]interface{}(nil), (*Encoder).fastpathEncMapUintIntfR, (*Decoder).fastpathDecMapUintIntfR)
+ fn(map[uint]string(nil), (*Encoder).fastpathEncMapUintStringR, (*Decoder).fastpathDecMapUintStringR)
+ fn(map[uint]uint(nil), (*Encoder).fastpathEncMapUintUintR, (*Decoder).fastpathDecMapUintUintR)
+ fn(map[uint]uint8(nil), (*Encoder).fastpathEncMapUintUint8R, (*Decoder).fastpathDecMapUintUint8R)
+ fn(map[uint]uint16(nil), (*Encoder).fastpathEncMapUintUint16R, (*Decoder).fastpathDecMapUintUint16R)
+ fn(map[uint]uint32(nil), (*Encoder).fastpathEncMapUintUint32R, (*Decoder).fastpathDecMapUintUint32R)
+ fn(map[uint]uint64(nil), (*Encoder).fastpathEncMapUintUint64R, (*Decoder).fastpathDecMapUintUint64R)
+ fn(map[uint]uintptr(nil), (*Encoder).fastpathEncMapUintUintptrR, (*Decoder).fastpathDecMapUintUintptrR)
+ fn(map[uint]int(nil), (*Encoder).fastpathEncMapUintIntR, (*Decoder).fastpathDecMapUintIntR)
+ fn(map[uint]int8(nil), (*Encoder).fastpathEncMapUintInt8R, (*Decoder).fastpathDecMapUintInt8R)
+ fn(map[uint]int16(nil), (*Encoder).fastpathEncMapUintInt16R, (*Decoder).fastpathDecMapUintInt16R)
+ fn(map[uint]int32(nil), (*Encoder).fastpathEncMapUintInt32R, (*Decoder).fastpathDecMapUintInt32R)
+ fn(map[uint]int64(nil), (*Encoder).fastpathEncMapUintInt64R, (*Decoder).fastpathDecMapUintInt64R)
+ fn(map[uint]float32(nil), (*Encoder).fastpathEncMapUintFloat32R, (*Decoder).fastpathDecMapUintFloat32R)
+ fn(map[uint]float64(nil), (*Encoder).fastpathEncMapUintFloat64R, (*Decoder).fastpathDecMapUintFloat64R)
+ fn(map[uint]bool(nil), (*Encoder).fastpathEncMapUintBoolR, (*Decoder).fastpathDecMapUintBoolR)
+ fn(map[uint8]interface{}(nil), (*Encoder).fastpathEncMapUint8IntfR, (*Decoder).fastpathDecMapUint8IntfR)
+ fn(map[uint8]string(nil), (*Encoder).fastpathEncMapUint8StringR, (*Decoder).fastpathDecMapUint8StringR)
+ fn(map[uint8]uint(nil), (*Encoder).fastpathEncMapUint8UintR, (*Decoder).fastpathDecMapUint8UintR)
+ fn(map[uint8]uint8(nil), (*Encoder).fastpathEncMapUint8Uint8R, (*Decoder).fastpathDecMapUint8Uint8R)
+ fn(map[uint8]uint16(nil), (*Encoder).fastpathEncMapUint8Uint16R, (*Decoder).fastpathDecMapUint8Uint16R)
+ fn(map[uint8]uint32(nil), (*Encoder).fastpathEncMapUint8Uint32R, (*Decoder).fastpathDecMapUint8Uint32R)
+ fn(map[uint8]uint64(nil), (*Encoder).fastpathEncMapUint8Uint64R, (*Decoder).fastpathDecMapUint8Uint64R)
+ fn(map[uint8]uintptr(nil), (*Encoder).fastpathEncMapUint8UintptrR, (*Decoder).fastpathDecMapUint8UintptrR)
+ fn(map[uint8]int(nil), (*Encoder).fastpathEncMapUint8IntR, (*Decoder).fastpathDecMapUint8IntR)
+ fn(map[uint8]int8(nil), (*Encoder).fastpathEncMapUint8Int8R, (*Decoder).fastpathDecMapUint8Int8R)
+ fn(map[uint8]int16(nil), (*Encoder).fastpathEncMapUint8Int16R, (*Decoder).fastpathDecMapUint8Int16R)
+ fn(map[uint8]int32(nil), (*Encoder).fastpathEncMapUint8Int32R, (*Decoder).fastpathDecMapUint8Int32R)
+ fn(map[uint8]int64(nil), (*Encoder).fastpathEncMapUint8Int64R, (*Decoder).fastpathDecMapUint8Int64R)
+ fn(map[uint8]float32(nil), (*Encoder).fastpathEncMapUint8Float32R, (*Decoder).fastpathDecMapUint8Float32R)
+ fn(map[uint8]float64(nil), (*Encoder).fastpathEncMapUint8Float64R, (*Decoder).fastpathDecMapUint8Float64R)
+ fn(map[uint8]bool(nil), (*Encoder).fastpathEncMapUint8BoolR, (*Decoder).fastpathDecMapUint8BoolR)
+ fn(map[uint16]interface{}(nil), (*Encoder).fastpathEncMapUint16IntfR, (*Decoder).fastpathDecMapUint16IntfR)
+ fn(map[uint16]string(nil), (*Encoder).fastpathEncMapUint16StringR, (*Decoder).fastpathDecMapUint16StringR)
+ fn(map[uint16]uint(nil), (*Encoder).fastpathEncMapUint16UintR, (*Decoder).fastpathDecMapUint16UintR)
+ fn(map[uint16]uint8(nil), (*Encoder).fastpathEncMapUint16Uint8R, (*Decoder).fastpathDecMapUint16Uint8R)
+ fn(map[uint16]uint16(nil), (*Encoder).fastpathEncMapUint16Uint16R, (*Decoder).fastpathDecMapUint16Uint16R)
+ fn(map[uint16]uint32(nil), (*Encoder).fastpathEncMapUint16Uint32R, (*Decoder).fastpathDecMapUint16Uint32R)
+ fn(map[uint16]uint64(nil), (*Encoder).fastpathEncMapUint16Uint64R, (*Decoder).fastpathDecMapUint16Uint64R)
+ fn(map[uint16]uintptr(nil), (*Encoder).fastpathEncMapUint16UintptrR, (*Decoder).fastpathDecMapUint16UintptrR)
+ fn(map[uint16]int(nil), (*Encoder).fastpathEncMapUint16IntR, (*Decoder).fastpathDecMapUint16IntR)
+ fn(map[uint16]int8(nil), (*Encoder).fastpathEncMapUint16Int8R, (*Decoder).fastpathDecMapUint16Int8R)
+ fn(map[uint16]int16(nil), (*Encoder).fastpathEncMapUint16Int16R, (*Decoder).fastpathDecMapUint16Int16R)
+ fn(map[uint16]int32(nil), (*Encoder).fastpathEncMapUint16Int32R, (*Decoder).fastpathDecMapUint16Int32R)
+ fn(map[uint16]int64(nil), (*Encoder).fastpathEncMapUint16Int64R, (*Decoder).fastpathDecMapUint16Int64R)
+ fn(map[uint16]float32(nil), (*Encoder).fastpathEncMapUint16Float32R, (*Decoder).fastpathDecMapUint16Float32R)
+ fn(map[uint16]float64(nil), (*Encoder).fastpathEncMapUint16Float64R, (*Decoder).fastpathDecMapUint16Float64R)
+ fn(map[uint16]bool(nil), (*Encoder).fastpathEncMapUint16BoolR, (*Decoder).fastpathDecMapUint16BoolR)
+ fn(map[uint32]interface{}(nil), (*Encoder).fastpathEncMapUint32IntfR, (*Decoder).fastpathDecMapUint32IntfR)
+ fn(map[uint32]string(nil), (*Encoder).fastpathEncMapUint32StringR, (*Decoder).fastpathDecMapUint32StringR)
+ fn(map[uint32]uint(nil), (*Encoder).fastpathEncMapUint32UintR, (*Decoder).fastpathDecMapUint32UintR)
+ fn(map[uint32]uint8(nil), (*Encoder).fastpathEncMapUint32Uint8R, (*Decoder).fastpathDecMapUint32Uint8R)
+ fn(map[uint32]uint16(nil), (*Encoder).fastpathEncMapUint32Uint16R, (*Decoder).fastpathDecMapUint32Uint16R)
+ fn(map[uint32]uint32(nil), (*Encoder).fastpathEncMapUint32Uint32R, (*Decoder).fastpathDecMapUint32Uint32R)
+ fn(map[uint32]uint64(nil), (*Encoder).fastpathEncMapUint32Uint64R, (*Decoder).fastpathDecMapUint32Uint64R)
+ fn(map[uint32]uintptr(nil), (*Encoder).fastpathEncMapUint32UintptrR, (*Decoder).fastpathDecMapUint32UintptrR)
+ fn(map[uint32]int(nil), (*Encoder).fastpathEncMapUint32IntR, (*Decoder).fastpathDecMapUint32IntR)
+ fn(map[uint32]int8(nil), (*Encoder).fastpathEncMapUint32Int8R, (*Decoder).fastpathDecMapUint32Int8R)
+ fn(map[uint32]int16(nil), (*Encoder).fastpathEncMapUint32Int16R, (*Decoder).fastpathDecMapUint32Int16R)
+ fn(map[uint32]int32(nil), (*Encoder).fastpathEncMapUint32Int32R, (*Decoder).fastpathDecMapUint32Int32R)
+ fn(map[uint32]int64(nil), (*Encoder).fastpathEncMapUint32Int64R, (*Decoder).fastpathDecMapUint32Int64R)
+ fn(map[uint32]float32(nil), (*Encoder).fastpathEncMapUint32Float32R, (*Decoder).fastpathDecMapUint32Float32R)
+ fn(map[uint32]float64(nil), (*Encoder).fastpathEncMapUint32Float64R, (*Decoder).fastpathDecMapUint32Float64R)
+ fn(map[uint32]bool(nil), (*Encoder).fastpathEncMapUint32BoolR, (*Decoder).fastpathDecMapUint32BoolR)
+ fn(map[uint64]interface{}(nil), (*Encoder).fastpathEncMapUint64IntfR, (*Decoder).fastpathDecMapUint64IntfR)
+ fn(map[uint64]string(nil), (*Encoder).fastpathEncMapUint64StringR, (*Decoder).fastpathDecMapUint64StringR)
+ fn(map[uint64]uint(nil), (*Encoder).fastpathEncMapUint64UintR, (*Decoder).fastpathDecMapUint64UintR)
+ fn(map[uint64]uint8(nil), (*Encoder).fastpathEncMapUint64Uint8R, (*Decoder).fastpathDecMapUint64Uint8R)
+ fn(map[uint64]uint16(nil), (*Encoder).fastpathEncMapUint64Uint16R, (*Decoder).fastpathDecMapUint64Uint16R)
+ fn(map[uint64]uint32(nil), (*Encoder).fastpathEncMapUint64Uint32R, (*Decoder).fastpathDecMapUint64Uint32R)
+ fn(map[uint64]uint64(nil), (*Encoder).fastpathEncMapUint64Uint64R, (*Decoder).fastpathDecMapUint64Uint64R)
+ fn(map[uint64]uintptr(nil), (*Encoder).fastpathEncMapUint64UintptrR, (*Decoder).fastpathDecMapUint64UintptrR)
+ fn(map[uint64]int(nil), (*Encoder).fastpathEncMapUint64IntR, (*Decoder).fastpathDecMapUint64IntR)
+ fn(map[uint64]int8(nil), (*Encoder).fastpathEncMapUint64Int8R, (*Decoder).fastpathDecMapUint64Int8R)
+ fn(map[uint64]int16(nil), (*Encoder).fastpathEncMapUint64Int16R, (*Decoder).fastpathDecMapUint64Int16R)
+ fn(map[uint64]int32(nil), (*Encoder).fastpathEncMapUint64Int32R, (*Decoder).fastpathDecMapUint64Int32R)
+ fn(map[uint64]int64(nil), (*Encoder).fastpathEncMapUint64Int64R, (*Decoder).fastpathDecMapUint64Int64R)
+ fn(map[uint64]float32(nil), (*Encoder).fastpathEncMapUint64Float32R, (*Decoder).fastpathDecMapUint64Float32R)
+ fn(map[uint64]float64(nil), (*Encoder).fastpathEncMapUint64Float64R, (*Decoder).fastpathDecMapUint64Float64R)
+ fn(map[uint64]bool(nil), (*Encoder).fastpathEncMapUint64BoolR, (*Decoder).fastpathDecMapUint64BoolR)
+ fn(map[uintptr]interface{}(nil), (*Encoder).fastpathEncMapUintptrIntfR, (*Decoder).fastpathDecMapUintptrIntfR)
+ fn(map[uintptr]string(nil), (*Encoder).fastpathEncMapUintptrStringR, (*Decoder).fastpathDecMapUintptrStringR)
+ fn(map[uintptr]uint(nil), (*Encoder).fastpathEncMapUintptrUintR, (*Decoder).fastpathDecMapUintptrUintR)
+ fn(map[uintptr]uint8(nil), (*Encoder).fastpathEncMapUintptrUint8R, (*Decoder).fastpathDecMapUintptrUint8R)
+ fn(map[uintptr]uint16(nil), (*Encoder).fastpathEncMapUintptrUint16R, (*Decoder).fastpathDecMapUintptrUint16R)
+ fn(map[uintptr]uint32(nil), (*Encoder).fastpathEncMapUintptrUint32R, (*Decoder).fastpathDecMapUintptrUint32R)
+ fn(map[uintptr]uint64(nil), (*Encoder).fastpathEncMapUintptrUint64R, (*Decoder).fastpathDecMapUintptrUint64R)
+ fn(map[uintptr]uintptr(nil), (*Encoder).fastpathEncMapUintptrUintptrR, (*Decoder).fastpathDecMapUintptrUintptrR)
+ fn(map[uintptr]int(nil), (*Encoder).fastpathEncMapUintptrIntR, (*Decoder).fastpathDecMapUintptrIntR)
+ fn(map[uintptr]int8(nil), (*Encoder).fastpathEncMapUintptrInt8R, (*Decoder).fastpathDecMapUintptrInt8R)
+ fn(map[uintptr]int16(nil), (*Encoder).fastpathEncMapUintptrInt16R, (*Decoder).fastpathDecMapUintptrInt16R)
+ fn(map[uintptr]int32(nil), (*Encoder).fastpathEncMapUintptrInt32R, (*Decoder).fastpathDecMapUintptrInt32R)
+ fn(map[uintptr]int64(nil), (*Encoder).fastpathEncMapUintptrInt64R, (*Decoder).fastpathDecMapUintptrInt64R)
+ fn(map[uintptr]float32(nil), (*Encoder).fastpathEncMapUintptrFloat32R, (*Decoder).fastpathDecMapUintptrFloat32R)
+ fn(map[uintptr]float64(nil), (*Encoder).fastpathEncMapUintptrFloat64R, (*Decoder).fastpathDecMapUintptrFloat64R)
+ fn(map[uintptr]bool(nil), (*Encoder).fastpathEncMapUintptrBoolR, (*Decoder).fastpathDecMapUintptrBoolR)
+ fn(map[int]interface{}(nil), (*Encoder).fastpathEncMapIntIntfR, (*Decoder).fastpathDecMapIntIntfR)
+ fn(map[int]string(nil), (*Encoder).fastpathEncMapIntStringR, (*Decoder).fastpathDecMapIntStringR)
+ fn(map[int]uint(nil), (*Encoder).fastpathEncMapIntUintR, (*Decoder).fastpathDecMapIntUintR)
+ fn(map[int]uint8(nil), (*Encoder).fastpathEncMapIntUint8R, (*Decoder).fastpathDecMapIntUint8R)
+ fn(map[int]uint16(nil), (*Encoder).fastpathEncMapIntUint16R, (*Decoder).fastpathDecMapIntUint16R)
+ fn(map[int]uint32(nil), (*Encoder).fastpathEncMapIntUint32R, (*Decoder).fastpathDecMapIntUint32R)
+ fn(map[int]uint64(nil), (*Encoder).fastpathEncMapIntUint64R, (*Decoder).fastpathDecMapIntUint64R)
+ fn(map[int]uintptr(nil), (*Encoder).fastpathEncMapIntUintptrR, (*Decoder).fastpathDecMapIntUintptrR)
+ fn(map[int]int(nil), (*Encoder).fastpathEncMapIntIntR, (*Decoder).fastpathDecMapIntIntR)
+ fn(map[int]int8(nil), (*Encoder).fastpathEncMapIntInt8R, (*Decoder).fastpathDecMapIntInt8R)
+ fn(map[int]int16(nil), (*Encoder).fastpathEncMapIntInt16R, (*Decoder).fastpathDecMapIntInt16R)
+ fn(map[int]int32(nil), (*Encoder).fastpathEncMapIntInt32R, (*Decoder).fastpathDecMapIntInt32R)
+ fn(map[int]int64(nil), (*Encoder).fastpathEncMapIntInt64R, (*Decoder).fastpathDecMapIntInt64R)
+ fn(map[int]float32(nil), (*Encoder).fastpathEncMapIntFloat32R, (*Decoder).fastpathDecMapIntFloat32R)
+ fn(map[int]float64(nil), (*Encoder).fastpathEncMapIntFloat64R, (*Decoder).fastpathDecMapIntFloat64R)
+ fn(map[int]bool(nil), (*Encoder).fastpathEncMapIntBoolR, (*Decoder).fastpathDecMapIntBoolR)
+ fn(map[int8]interface{}(nil), (*Encoder).fastpathEncMapInt8IntfR, (*Decoder).fastpathDecMapInt8IntfR)
+ fn(map[int8]string(nil), (*Encoder).fastpathEncMapInt8StringR, (*Decoder).fastpathDecMapInt8StringR)
+ fn(map[int8]uint(nil), (*Encoder).fastpathEncMapInt8UintR, (*Decoder).fastpathDecMapInt8UintR)
+ fn(map[int8]uint8(nil), (*Encoder).fastpathEncMapInt8Uint8R, (*Decoder).fastpathDecMapInt8Uint8R)
+ fn(map[int8]uint16(nil), (*Encoder).fastpathEncMapInt8Uint16R, (*Decoder).fastpathDecMapInt8Uint16R)
+ fn(map[int8]uint32(nil), (*Encoder).fastpathEncMapInt8Uint32R, (*Decoder).fastpathDecMapInt8Uint32R)
+ fn(map[int8]uint64(nil), (*Encoder).fastpathEncMapInt8Uint64R, (*Decoder).fastpathDecMapInt8Uint64R)
+ fn(map[int8]uintptr(nil), (*Encoder).fastpathEncMapInt8UintptrR, (*Decoder).fastpathDecMapInt8UintptrR)
+ fn(map[int8]int(nil), (*Encoder).fastpathEncMapInt8IntR, (*Decoder).fastpathDecMapInt8IntR)
+ fn(map[int8]int8(nil), (*Encoder).fastpathEncMapInt8Int8R, (*Decoder).fastpathDecMapInt8Int8R)
+ fn(map[int8]int16(nil), (*Encoder).fastpathEncMapInt8Int16R, (*Decoder).fastpathDecMapInt8Int16R)
+ fn(map[int8]int32(nil), (*Encoder).fastpathEncMapInt8Int32R, (*Decoder).fastpathDecMapInt8Int32R)
+ fn(map[int8]int64(nil), (*Encoder).fastpathEncMapInt8Int64R, (*Decoder).fastpathDecMapInt8Int64R)
+ fn(map[int8]float32(nil), (*Encoder).fastpathEncMapInt8Float32R, (*Decoder).fastpathDecMapInt8Float32R)
+ fn(map[int8]float64(nil), (*Encoder).fastpathEncMapInt8Float64R, (*Decoder).fastpathDecMapInt8Float64R)
+ fn(map[int8]bool(nil), (*Encoder).fastpathEncMapInt8BoolR, (*Decoder).fastpathDecMapInt8BoolR)
+ fn(map[int16]interface{}(nil), (*Encoder).fastpathEncMapInt16IntfR, (*Decoder).fastpathDecMapInt16IntfR)
+ fn(map[int16]string(nil), (*Encoder).fastpathEncMapInt16StringR, (*Decoder).fastpathDecMapInt16StringR)
+ fn(map[int16]uint(nil), (*Encoder).fastpathEncMapInt16UintR, (*Decoder).fastpathDecMapInt16UintR)
+ fn(map[int16]uint8(nil), (*Encoder).fastpathEncMapInt16Uint8R, (*Decoder).fastpathDecMapInt16Uint8R)
+ fn(map[int16]uint16(nil), (*Encoder).fastpathEncMapInt16Uint16R, (*Decoder).fastpathDecMapInt16Uint16R)
+ fn(map[int16]uint32(nil), (*Encoder).fastpathEncMapInt16Uint32R, (*Decoder).fastpathDecMapInt16Uint32R)
+ fn(map[int16]uint64(nil), (*Encoder).fastpathEncMapInt16Uint64R, (*Decoder).fastpathDecMapInt16Uint64R)
+ fn(map[int16]uintptr(nil), (*Encoder).fastpathEncMapInt16UintptrR, (*Decoder).fastpathDecMapInt16UintptrR)
+ fn(map[int16]int(nil), (*Encoder).fastpathEncMapInt16IntR, (*Decoder).fastpathDecMapInt16IntR)
+ fn(map[int16]int8(nil), (*Encoder).fastpathEncMapInt16Int8R, (*Decoder).fastpathDecMapInt16Int8R)
+ fn(map[int16]int16(nil), (*Encoder).fastpathEncMapInt16Int16R, (*Decoder).fastpathDecMapInt16Int16R)
+ fn(map[int16]int32(nil), (*Encoder).fastpathEncMapInt16Int32R, (*Decoder).fastpathDecMapInt16Int32R)
+ fn(map[int16]int64(nil), (*Encoder).fastpathEncMapInt16Int64R, (*Decoder).fastpathDecMapInt16Int64R)
+ fn(map[int16]float32(nil), (*Encoder).fastpathEncMapInt16Float32R, (*Decoder).fastpathDecMapInt16Float32R)
+ fn(map[int16]float64(nil), (*Encoder).fastpathEncMapInt16Float64R, (*Decoder).fastpathDecMapInt16Float64R)
+ fn(map[int16]bool(nil), (*Encoder).fastpathEncMapInt16BoolR, (*Decoder).fastpathDecMapInt16BoolR)
+ fn(map[int32]interface{}(nil), (*Encoder).fastpathEncMapInt32IntfR, (*Decoder).fastpathDecMapInt32IntfR)
+ fn(map[int32]string(nil), (*Encoder).fastpathEncMapInt32StringR, (*Decoder).fastpathDecMapInt32StringR)
+ fn(map[int32]uint(nil), (*Encoder).fastpathEncMapInt32UintR, (*Decoder).fastpathDecMapInt32UintR)
+ fn(map[int32]uint8(nil), (*Encoder).fastpathEncMapInt32Uint8R, (*Decoder).fastpathDecMapInt32Uint8R)
+ fn(map[int32]uint16(nil), (*Encoder).fastpathEncMapInt32Uint16R, (*Decoder).fastpathDecMapInt32Uint16R)
+ fn(map[int32]uint32(nil), (*Encoder).fastpathEncMapInt32Uint32R, (*Decoder).fastpathDecMapInt32Uint32R)
+ fn(map[int32]uint64(nil), (*Encoder).fastpathEncMapInt32Uint64R, (*Decoder).fastpathDecMapInt32Uint64R)
+ fn(map[int32]uintptr(nil), (*Encoder).fastpathEncMapInt32UintptrR, (*Decoder).fastpathDecMapInt32UintptrR)
+ fn(map[int32]int(nil), (*Encoder).fastpathEncMapInt32IntR, (*Decoder).fastpathDecMapInt32IntR)
+ fn(map[int32]int8(nil), (*Encoder).fastpathEncMapInt32Int8R, (*Decoder).fastpathDecMapInt32Int8R)
+ fn(map[int32]int16(nil), (*Encoder).fastpathEncMapInt32Int16R, (*Decoder).fastpathDecMapInt32Int16R)
+ fn(map[int32]int32(nil), (*Encoder).fastpathEncMapInt32Int32R, (*Decoder).fastpathDecMapInt32Int32R)
+ fn(map[int32]int64(nil), (*Encoder).fastpathEncMapInt32Int64R, (*Decoder).fastpathDecMapInt32Int64R)
+ fn(map[int32]float32(nil), (*Encoder).fastpathEncMapInt32Float32R, (*Decoder).fastpathDecMapInt32Float32R)
+ fn(map[int32]float64(nil), (*Encoder).fastpathEncMapInt32Float64R, (*Decoder).fastpathDecMapInt32Float64R)
+ fn(map[int32]bool(nil), (*Encoder).fastpathEncMapInt32BoolR, (*Decoder).fastpathDecMapInt32BoolR)
+ fn(map[int64]interface{}(nil), (*Encoder).fastpathEncMapInt64IntfR, (*Decoder).fastpathDecMapInt64IntfR)
+ fn(map[int64]string(nil), (*Encoder).fastpathEncMapInt64StringR, (*Decoder).fastpathDecMapInt64StringR)
+ fn(map[int64]uint(nil), (*Encoder).fastpathEncMapInt64UintR, (*Decoder).fastpathDecMapInt64UintR)
+ fn(map[int64]uint8(nil), (*Encoder).fastpathEncMapInt64Uint8R, (*Decoder).fastpathDecMapInt64Uint8R)
+ fn(map[int64]uint16(nil), (*Encoder).fastpathEncMapInt64Uint16R, (*Decoder).fastpathDecMapInt64Uint16R)
+ fn(map[int64]uint32(nil), (*Encoder).fastpathEncMapInt64Uint32R, (*Decoder).fastpathDecMapInt64Uint32R)
+ fn(map[int64]uint64(nil), (*Encoder).fastpathEncMapInt64Uint64R, (*Decoder).fastpathDecMapInt64Uint64R)
+ fn(map[int64]uintptr(nil), (*Encoder).fastpathEncMapInt64UintptrR, (*Decoder).fastpathDecMapInt64UintptrR)
+ fn(map[int64]int(nil), (*Encoder).fastpathEncMapInt64IntR, (*Decoder).fastpathDecMapInt64IntR)
+ fn(map[int64]int8(nil), (*Encoder).fastpathEncMapInt64Int8R, (*Decoder).fastpathDecMapInt64Int8R)
+ fn(map[int64]int16(nil), (*Encoder).fastpathEncMapInt64Int16R, (*Decoder).fastpathDecMapInt64Int16R)
+ fn(map[int64]int32(nil), (*Encoder).fastpathEncMapInt64Int32R, (*Decoder).fastpathDecMapInt64Int32R)
+ fn(map[int64]int64(nil), (*Encoder).fastpathEncMapInt64Int64R, (*Decoder).fastpathDecMapInt64Int64R)
+ fn(map[int64]float32(nil), (*Encoder).fastpathEncMapInt64Float32R, (*Decoder).fastpathDecMapInt64Float32R)
+ fn(map[int64]float64(nil), (*Encoder).fastpathEncMapInt64Float64R, (*Decoder).fastpathDecMapInt64Float64R)
+ fn(map[int64]bool(nil), (*Encoder).fastpathEncMapInt64BoolR, (*Decoder).fastpathDecMapInt64BoolR)
+ fn(map[bool]interface{}(nil), (*Encoder).fastpathEncMapBoolIntfR, (*Decoder).fastpathDecMapBoolIntfR)
+ fn(map[bool]string(nil), (*Encoder).fastpathEncMapBoolStringR, (*Decoder).fastpathDecMapBoolStringR)
+ fn(map[bool]uint(nil), (*Encoder).fastpathEncMapBoolUintR, (*Decoder).fastpathDecMapBoolUintR)
+ fn(map[bool]uint8(nil), (*Encoder).fastpathEncMapBoolUint8R, (*Decoder).fastpathDecMapBoolUint8R)
+ fn(map[bool]uint16(nil), (*Encoder).fastpathEncMapBoolUint16R, (*Decoder).fastpathDecMapBoolUint16R)
+ fn(map[bool]uint32(nil), (*Encoder).fastpathEncMapBoolUint32R, (*Decoder).fastpathDecMapBoolUint32R)
+ fn(map[bool]uint64(nil), (*Encoder).fastpathEncMapBoolUint64R, (*Decoder).fastpathDecMapBoolUint64R)
+ fn(map[bool]uintptr(nil), (*Encoder).fastpathEncMapBoolUintptrR, (*Decoder).fastpathDecMapBoolUintptrR)
+ fn(map[bool]int(nil), (*Encoder).fastpathEncMapBoolIntR, (*Decoder).fastpathDecMapBoolIntR)
+ fn(map[bool]int8(nil), (*Encoder).fastpathEncMapBoolInt8R, (*Decoder).fastpathDecMapBoolInt8R)
+ fn(map[bool]int16(nil), (*Encoder).fastpathEncMapBoolInt16R, (*Decoder).fastpathDecMapBoolInt16R)
+ fn(map[bool]int32(nil), (*Encoder).fastpathEncMapBoolInt32R, (*Decoder).fastpathDecMapBoolInt32R)
+ fn(map[bool]int64(nil), (*Encoder).fastpathEncMapBoolInt64R, (*Decoder).fastpathDecMapBoolInt64R)
+ fn(map[bool]float32(nil), (*Encoder).fastpathEncMapBoolFloat32R, (*Decoder).fastpathDecMapBoolFloat32R)
+ fn(map[bool]float64(nil), (*Encoder).fastpathEncMapBoolFloat64R, (*Decoder).fastpathDecMapBoolFloat64R)
+ fn(map[bool]bool(nil), (*Encoder).fastpathEncMapBoolBoolR, (*Decoder).fastpathDecMapBoolBoolR)
sort.Sort(fastpathAslice(fastpathAV[:]))
}
@@ -373,1365 +375,1362 @@ func init() {
// -- -- fast path type switch
func fastpathEncodeTypeSwitch(iv interface{}, e *Encoder) bool {
- if !fastpathEnabled {
- return false
- }
switch v := iv.(type) {
case []interface{}:
- fastpathTV.EncSliceIntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceIntfV(v, e)
case *[]interface{}:
- fastpathTV.EncSliceIntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceIntfV(*v, e)
case map[interface{}]interface{}:
- fastpathTV.EncMapIntfIntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfIntfV(v, e)
case *map[interface{}]interface{}:
- fastpathTV.EncMapIntfIntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfIntfV(*v, e)
case map[interface{}]string:
- fastpathTV.EncMapIntfStringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfStringV(v, e)
case *map[interface{}]string:
- fastpathTV.EncMapIntfStringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfStringV(*v, e)
case map[interface{}]uint:
- fastpathTV.EncMapIntfUintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUintV(v, e)
case *map[interface{}]uint:
- fastpathTV.EncMapIntfUintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUintV(*v, e)
case map[interface{}]uint8:
- fastpathTV.EncMapIntfUint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint8V(v, e)
case *map[interface{}]uint8:
- fastpathTV.EncMapIntfUint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint8V(*v, e)
case map[interface{}]uint16:
- fastpathTV.EncMapIntfUint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint16V(v, e)
case *map[interface{}]uint16:
- fastpathTV.EncMapIntfUint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint16V(*v, e)
case map[interface{}]uint32:
- fastpathTV.EncMapIntfUint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint32V(v, e)
case *map[interface{}]uint32:
- fastpathTV.EncMapIntfUint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint32V(*v, e)
case map[interface{}]uint64:
- fastpathTV.EncMapIntfUint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint64V(v, e)
case *map[interface{}]uint64:
- fastpathTV.EncMapIntfUint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint64V(*v, e)
case map[interface{}]uintptr:
- fastpathTV.EncMapIntfUintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUintptrV(v, e)
case *map[interface{}]uintptr:
- fastpathTV.EncMapIntfUintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUintptrV(*v, e)
case map[interface{}]int:
- fastpathTV.EncMapIntfIntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfIntV(v, e)
case *map[interface{}]int:
- fastpathTV.EncMapIntfIntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfIntV(*v, e)
case map[interface{}]int8:
- fastpathTV.EncMapIntfInt8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt8V(v, e)
case *map[interface{}]int8:
- fastpathTV.EncMapIntfInt8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt8V(*v, e)
case map[interface{}]int16:
- fastpathTV.EncMapIntfInt16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt16V(v, e)
case *map[interface{}]int16:
- fastpathTV.EncMapIntfInt16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt16V(*v, e)
case map[interface{}]int32:
- fastpathTV.EncMapIntfInt32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt32V(v, e)
case *map[interface{}]int32:
- fastpathTV.EncMapIntfInt32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt32V(*v, e)
case map[interface{}]int64:
- fastpathTV.EncMapIntfInt64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt64V(v, e)
case *map[interface{}]int64:
- fastpathTV.EncMapIntfInt64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt64V(*v, e)
case map[interface{}]float32:
- fastpathTV.EncMapIntfFloat32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfFloat32V(v, e)
case *map[interface{}]float32:
- fastpathTV.EncMapIntfFloat32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfFloat32V(*v, e)
case map[interface{}]float64:
- fastpathTV.EncMapIntfFloat64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfFloat64V(v, e)
case *map[interface{}]float64:
- fastpathTV.EncMapIntfFloat64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfFloat64V(*v, e)
case map[interface{}]bool:
- fastpathTV.EncMapIntfBoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfBoolV(v, e)
case *map[interface{}]bool:
- fastpathTV.EncMapIntfBoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfBoolV(*v, e)
case []string:
- fastpathTV.EncSliceStringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceStringV(v, e)
case *[]string:
- fastpathTV.EncSliceStringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceStringV(*v, e)
case map[string]interface{}:
- fastpathTV.EncMapStringIntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringIntfV(v, e)
case *map[string]interface{}:
- fastpathTV.EncMapStringIntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringIntfV(*v, e)
case map[string]string:
- fastpathTV.EncMapStringStringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringStringV(v, e)
case *map[string]string:
- fastpathTV.EncMapStringStringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringStringV(*v, e)
case map[string]uint:
- fastpathTV.EncMapStringUintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUintV(v, e)
case *map[string]uint:
- fastpathTV.EncMapStringUintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUintV(*v, e)
case map[string]uint8:
- fastpathTV.EncMapStringUint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint8V(v, e)
case *map[string]uint8:
- fastpathTV.EncMapStringUint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint8V(*v, e)
case map[string]uint16:
- fastpathTV.EncMapStringUint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint16V(v, e)
case *map[string]uint16:
- fastpathTV.EncMapStringUint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint16V(*v, e)
case map[string]uint32:
- fastpathTV.EncMapStringUint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint32V(v, e)
case *map[string]uint32:
- fastpathTV.EncMapStringUint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint32V(*v, e)
case map[string]uint64:
- fastpathTV.EncMapStringUint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint64V(v, e)
case *map[string]uint64:
- fastpathTV.EncMapStringUint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint64V(*v, e)
case map[string]uintptr:
- fastpathTV.EncMapStringUintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUintptrV(v, e)
case *map[string]uintptr:
- fastpathTV.EncMapStringUintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUintptrV(*v, e)
case map[string]int:
- fastpathTV.EncMapStringIntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringIntV(v, e)
case *map[string]int:
- fastpathTV.EncMapStringIntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringIntV(*v, e)
case map[string]int8:
- fastpathTV.EncMapStringInt8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt8V(v, e)
case *map[string]int8:
- fastpathTV.EncMapStringInt8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt8V(*v, e)
case map[string]int16:
- fastpathTV.EncMapStringInt16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt16V(v, e)
case *map[string]int16:
- fastpathTV.EncMapStringInt16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt16V(*v, e)
case map[string]int32:
- fastpathTV.EncMapStringInt32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt32V(v, e)
case *map[string]int32:
- fastpathTV.EncMapStringInt32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt32V(*v, e)
case map[string]int64:
- fastpathTV.EncMapStringInt64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt64V(v, e)
case *map[string]int64:
- fastpathTV.EncMapStringInt64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt64V(*v, e)
case map[string]float32:
- fastpathTV.EncMapStringFloat32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringFloat32V(v, e)
case *map[string]float32:
- fastpathTV.EncMapStringFloat32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringFloat32V(*v, e)
case map[string]float64:
- fastpathTV.EncMapStringFloat64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringFloat64V(v, e)
case *map[string]float64:
- fastpathTV.EncMapStringFloat64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringFloat64V(*v, e)
case map[string]bool:
- fastpathTV.EncMapStringBoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringBoolV(v, e)
case *map[string]bool:
- fastpathTV.EncMapStringBoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringBoolV(*v, e)
case []float32:
- fastpathTV.EncSliceFloat32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceFloat32V(v, e)
case *[]float32:
- fastpathTV.EncSliceFloat32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceFloat32V(*v, e)
case map[float32]interface{}:
- fastpathTV.EncMapFloat32IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32IntfV(v, e)
case *map[float32]interface{}:
- fastpathTV.EncMapFloat32IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32IntfV(*v, e)
case map[float32]string:
- fastpathTV.EncMapFloat32StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32StringV(v, e)
case *map[float32]string:
- fastpathTV.EncMapFloat32StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32StringV(*v, e)
case map[float32]uint:
- fastpathTV.EncMapFloat32UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32UintV(v, e)
case *map[float32]uint:
- fastpathTV.EncMapFloat32UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32UintV(*v, e)
case map[float32]uint8:
- fastpathTV.EncMapFloat32Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint8V(v, e)
case *map[float32]uint8:
- fastpathTV.EncMapFloat32Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint8V(*v, e)
case map[float32]uint16:
- fastpathTV.EncMapFloat32Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint16V(v, e)
case *map[float32]uint16:
- fastpathTV.EncMapFloat32Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint16V(*v, e)
case map[float32]uint32:
- fastpathTV.EncMapFloat32Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint32V(v, e)
case *map[float32]uint32:
- fastpathTV.EncMapFloat32Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint32V(*v, e)
case map[float32]uint64:
- fastpathTV.EncMapFloat32Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint64V(v, e)
case *map[float32]uint64:
- fastpathTV.EncMapFloat32Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint64V(*v, e)
case map[float32]uintptr:
- fastpathTV.EncMapFloat32UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32UintptrV(v, e)
case *map[float32]uintptr:
- fastpathTV.EncMapFloat32UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32UintptrV(*v, e)
case map[float32]int:
- fastpathTV.EncMapFloat32IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32IntV(v, e)
case *map[float32]int:
- fastpathTV.EncMapFloat32IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32IntV(*v, e)
case map[float32]int8:
- fastpathTV.EncMapFloat32Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int8V(v, e)
case *map[float32]int8:
- fastpathTV.EncMapFloat32Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int8V(*v, e)
case map[float32]int16:
- fastpathTV.EncMapFloat32Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int16V(v, e)
case *map[float32]int16:
- fastpathTV.EncMapFloat32Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int16V(*v, e)
case map[float32]int32:
- fastpathTV.EncMapFloat32Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int32V(v, e)
case *map[float32]int32:
- fastpathTV.EncMapFloat32Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int32V(*v, e)
case map[float32]int64:
- fastpathTV.EncMapFloat32Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int64V(v, e)
case *map[float32]int64:
- fastpathTV.EncMapFloat32Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int64V(*v, e)
case map[float32]float32:
- fastpathTV.EncMapFloat32Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Float32V(v, e)
case *map[float32]float32:
- fastpathTV.EncMapFloat32Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Float32V(*v, e)
case map[float32]float64:
- fastpathTV.EncMapFloat32Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Float64V(v, e)
case *map[float32]float64:
- fastpathTV.EncMapFloat32Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Float64V(*v, e)
case map[float32]bool:
- fastpathTV.EncMapFloat32BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32BoolV(v, e)
case *map[float32]bool:
- fastpathTV.EncMapFloat32BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32BoolV(*v, e)
case []float64:
- fastpathTV.EncSliceFloat64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceFloat64V(v, e)
case *[]float64:
- fastpathTV.EncSliceFloat64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceFloat64V(*v, e)
case map[float64]interface{}:
- fastpathTV.EncMapFloat64IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64IntfV(v, e)
case *map[float64]interface{}:
- fastpathTV.EncMapFloat64IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64IntfV(*v, e)
case map[float64]string:
- fastpathTV.EncMapFloat64StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64StringV(v, e)
case *map[float64]string:
- fastpathTV.EncMapFloat64StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64StringV(*v, e)
case map[float64]uint:
- fastpathTV.EncMapFloat64UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64UintV(v, e)
case *map[float64]uint:
- fastpathTV.EncMapFloat64UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64UintV(*v, e)
case map[float64]uint8:
- fastpathTV.EncMapFloat64Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint8V(v, e)
case *map[float64]uint8:
- fastpathTV.EncMapFloat64Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint8V(*v, e)
case map[float64]uint16:
- fastpathTV.EncMapFloat64Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint16V(v, e)
case *map[float64]uint16:
- fastpathTV.EncMapFloat64Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint16V(*v, e)
case map[float64]uint32:
- fastpathTV.EncMapFloat64Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint32V(v, e)
case *map[float64]uint32:
- fastpathTV.EncMapFloat64Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint32V(*v, e)
case map[float64]uint64:
- fastpathTV.EncMapFloat64Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint64V(v, e)
case *map[float64]uint64:
- fastpathTV.EncMapFloat64Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint64V(*v, e)
case map[float64]uintptr:
- fastpathTV.EncMapFloat64UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64UintptrV(v, e)
case *map[float64]uintptr:
- fastpathTV.EncMapFloat64UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64UintptrV(*v, e)
case map[float64]int:
- fastpathTV.EncMapFloat64IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64IntV(v, e)
case *map[float64]int:
- fastpathTV.EncMapFloat64IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64IntV(*v, e)
case map[float64]int8:
- fastpathTV.EncMapFloat64Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int8V(v, e)
case *map[float64]int8:
- fastpathTV.EncMapFloat64Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int8V(*v, e)
case map[float64]int16:
- fastpathTV.EncMapFloat64Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int16V(v, e)
case *map[float64]int16:
- fastpathTV.EncMapFloat64Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int16V(*v, e)
case map[float64]int32:
- fastpathTV.EncMapFloat64Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int32V(v, e)
case *map[float64]int32:
- fastpathTV.EncMapFloat64Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int32V(*v, e)
case map[float64]int64:
- fastpathTV.EncMapFloat64Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int64V(v, e)
case *map[float64]int64:
- fastpathTV.EncMapFloat64Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int64V(*v, e)
case map[float64]float32:
- fastpathTV.EncMapFloat64Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Float32V(v, e)
case *map[float64]float32:
- fastpathTV.EncMapFloat64Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Float32V(*v, e)
case map[float64]float64:
- fastpathTV.EncMapFloat64Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Float64V(v, e)
case *map[float64]float64:
- fastpathTV.EncMapFloat64Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Float64V(*v, e)
case map[float64]bool:
- fastpathTV.EncMapFloat64BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64BoolV(v, e)
case *map[float64]bool:
- fastpathTV.EncMapFloat64BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64BoolV(*v, e)
case []uint:
- fastpathTV.EncSliceUintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUintV(v, e)
case *[]uint:
- fastpathTV.EncSliceUintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUintV(*v, e)
case map[uint]interface{}:
- fastpathTV.EncMapUintIntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintIntfV(v, e)
case *map[uint]interface{}:
- fastpathTV.EncMapUintIntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintIntfV(*v, e)
case map[uint]string:
- fastpathTV.EncMapUintStringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintStringV(v, e)
case *map[uint]string:
- fastpathTV.EncMapUintStringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintStringV(*v, e)
case map[uint]uint:
- fastpathTV.EncMapUintUintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUintV(v, e)
case *map[uint]uint:
- fastpathTV.EncMapUintUintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUintV(*v, e)
case map[uint]uint8:
- fastpathTV.EncMapUintUint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint8V(v, e)
case *map[uint]uint8:
- fastpathTV.EncMapUintUint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint8V(*v, e)
case map[uint]uint16:
- fastpathTV.EncMapUintUint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint16V(v, e)
case *map[uint]uint16:
- fastpathTV.EncMapUintUint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint16V(*v, e)
case map[uint]uint32:
- fastpathTV.EncMapUintUint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint32V(v, e)
case *map[uint]uint32:
- fastpathTV.EncMapUintUint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint32V(*v, e)
case map[uint]uint64:
- fastpathTV.EncMapUintUint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint64V(v, e)
case *map[uint]uint64:
- fastpathTV.EncMapUintUint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint64V(*v, e)
case map[uint]uintptr:
- fastpathTV.EncMapUintUintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUintptrV(v, e)
case *map[uint]uintptr:
- fastpathTV.EncMapUintUintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUintptrV(*v, e)
case map[uint]int:
- fastpathTV.EncMapUintIntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintIntV(v, e)
case *map[uint]int:
- fastpathTV.EncMapUintIntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintIntV(*v, e)
case map[uint]int8:
- fastpathTV.EncMapUintInt8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt8V(v, e)
case *map[uint]int8:
- fastpathTV.EncMapUintInt8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt8V(*v, e)
case map[uint]int16:
- fastpathTV.EncMapUintInt16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt16V(v, e)
case *map[uint]int16:
- fastpathTV.EncMapUintInt16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt16V(*v, e)
case map[uint]int32:
- fastpathTV.EncMapUintInt32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt32V(v, e)
case *map[uint]int32:
- fastpathTV.EncMapUintInt32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt32V(*v, e)
case map[uint]int64:
- fastpathTV.EncMapUintInt64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt64V(v, e)
case *map[uint]int64:
- fastpathTV.EncMapUintInt64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt64V(*v, e)
case map[uint]float32:
- fastpathTV.EncMapUintFloat32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintFloat32V(v, e)
case *map[uint]float32:
- fastpathTV.EncMapUintFloat32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintFloat32V(*v, e)
case map[uint]float64:
- fastpathTV.EncMapUintFloat64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintFloat64V(v, e)
case *map[uint]float64:
- fastpathTV.EncMapUintFloat64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintFloat64V(*v, e)
case map[uint]bool:
- fastpathTV.EncMapUintBoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintBoolV(v, e)
case *map[uint]bool:
- fastpathTV.EncMapUintBoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintBoolV(*v, e)
case map[uint8]interface{}:
- fastpathTV.EncMapUint8IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8IntfV(v, e)
case *map[uint8]interface{}:
- fastpathTV.EncMapUint8IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8IntfV(*v, e)
case map[uint8]string:
- fastpathTV.EncMapUint8StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8StringV(v, e)
case *map[uint8]string:
- fastpathTV.EncMapUint8StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8StringV(*v, e)
case map[uint8]uint:
- fastpathTV.EncMapUint8UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8UintV(v, e)
case *map[uint8]uint:
- fastpathTV.EncMapUint8UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8UintV(*v, e)
case map[uint8]uint8:
- fastpathTV.EncMapUint8Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint8V(v, e)
case *map[uint8]uint8:
- fastpathTV.EncMapUint8Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint8V(*v, e)
case map[uint8]uint16:
- fastpathTV.EncMapUint8Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint16V(v, e)
case *map[uint8]uint16:
- fastpathTV.EncMapUint8Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint16V(*v, e)
case map[uint8]uint32:
- fastpathTV.EncMapUint8Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint32V(v, e)
case *map[uint8]uint32:
- fastpathTV.EncMapUint8Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint32V(*v, e)
case map[uint8]uint64:
- fastpathTV.EncMapUint8Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint64V(v, e)
case *map[uint8]uint64:
- fastpathTV.EncMapUint8Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint64V(*v, e)
case map[uint8]uintptr:
- fastpathTV.EncMapUint8UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8UintptrV(v, e)
case *map[uint8]uintptr:
- fastpathTV.EncMapUint8UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8UintptrV(*v, e)
case map[uint8]int:
- fastpathTV.EncMapUint8IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8IntV(v, e)
case *map[uint8]int:
- fastpathTV.EncMapUint8IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8IntV(*v, e)
case map[uint8]int8:
- fastpathTV.EncMapUint8Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int8V(v, e)
case *map[uint8]int8:
- fastpathTV.EncMapUint8Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int8V(*v, e)
case map[uint8]int16:
- fastpathTV.EncMapUint8Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int16V(v, e)
case *map[uint8]int16:
- fastpathTV.EncMapUint8Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int16V(*v, e)
case map[uint8]int32:
- fastpathTV.EncMapUint8Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int32V(v, e)
case *map[uint8]int32:
- fastpathTV.EncMapUint8Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int32V(*v, e)
case map[uint8]int64:
- fastpathTV.EncMapUint8Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int64V(v, e)
case *map[uint8]int64:
- fastpathTV.EncMapUint8Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int64V(*v, e)
case map[uint8]float32:
- fastpathTV.EncMapUint8Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Float32V(v, e)
case *map[uint8]float32:
- fastpathTV.EncMapUint8Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Float32V(*v, e)
case map[uint8]float64:
- fastpathTV.EncMapUint8Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Float64V(v, e)
case *map[uint8]float64:
- fastpathTV.EncMapUint8Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Float64V(*v, e)
case map[uint8]bool:
- fastpathTV.EncMapUint8BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8BoolV(v, e)
case *map[uint8]bool:
- fastpathTV.EncMapUint8BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8BoolV(*v, e)
case []uint16:
- fastpathTV.EncSliceUint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUint16V(v, e)
case *[]uint16:
- fastpathTV.EncSliceUint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUint16V(*v, e)
case map[uint16]interface{}:
- fastpathTV.EncMapUint16IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16IntfV(v, e)
case *map[uint16]interface{}:
- fastpathTV.EncMapUint16IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16IntfV(*v, e)
case map[uint16]string:
- fastpathTV.EncMapUint16StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16StringV(v, e)
case *map[uint16]string:
- fastpathTV.EncMapUint16StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16StringV(*v, e)
case map[uint16]uint:
- fastpathTV.EncMapUint16UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16UintV(v, e)
case *map[uint16]uint:
- fastpathTV.EncMapUint16UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16UintV(*v, e)
case map[uint16]uint8:
- fastpathTV.EncMapUint16Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint8V(v, e)
case *map[uint16]uint8:
- fastpathTV.EncMapUint16Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint8V(*v, e)
case map[uint16]uint16:
- fastpathTV.EncMapUint16Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint16V(v, e)
case *map[uint16]uint16:
- fastpathTV.EncMapUint16Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint16V(*v, e)
case map[uint16]uint32:
- fastpathTV.EncMapUint16Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint32V(v, e)
case *map[uint16]uint32:
- fastpathTV.EncMapUint16Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint32V(*v, e)
case map[uint16]uint64:
- fastpathTV.EncMapUint16Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint64V(v, e)
case *map[uint16]uint64:
- fastpathTV.EncMapUint16Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint64V(*v, e)
case map[uint16]uintptr:
- fastpathTV.EncMapUint16UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16UintptrV(v, e)
case *map[uint16]uintptr:
- fastpathTV.EncMapUint16UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16UintptrV(*v, e)
case map[uint16]int:
- fastpathTV.EncMapUint16IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16IntV(v, e)
case *map[uint16]int:
- fastpathTV.EncMapUint16IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16IntV(*v, e)
case map[uint16]int8:
- fastpathTV.EncMapUint16Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int8V(v, e)
case *map[uint16]int8:
- fastpathTV.EncMapUint16Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int8V(*v, e)
case map[uint16]int16:
- fastpathTV.EncMapUint16Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int16V(v, e)
case *map[uint16]int16:
- fastpathTV.EncMapUint16Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int16V(*v, e)
case map[uint16]int32:
- fastpathTV.EncMapUint16Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int32V(v, e)
case *map[uint16]int32:
- fastpathTV.EncMapUint16Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int32V(*v, e)
case map[uint16]int64:
- fastpathTV.EncMapUint16Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int64V(v, e)
case *map[uint16]int64:
- fastpathTV.EncMapUint16Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int64V(*v, e)
case map[uint16]float32:
- fastpathTV.EncMapUint16Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Float32V(v, e)
case *map[uint16]float32:
- fastpathTV.EncMapUint16Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Float32V(*v, e)
case map[uint16]float64:
- fastpathTV.EncMapUint16Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Float64V(v, e)
case *map[uint16]float64:
- fastpathTV.EncMapUint16Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Float64V(*v, e)
case map[uint16]bool:
- fastpathTV.EncMapUint16BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16BoolV(v, e)
case *map[uint16]bool:
- fastpathTV.EncMapUint16BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16BoolV(*v, e)
case []uint32:
- fastpathTV.EncSliceUint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUint32V(v, e)
case *[]uint32:
- fastpathTV.EncSliceUint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUint32V(*v, e)
case map[uint32]interface{}:
- fastpathTV.EncMapUint32IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32IntfV(v, e)
case *map[uint32]interface{}:
- fastpathTV.EncMapUint32IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32IntfV(*v, e)
case map[uint32]string:
- fastpathTV.EncMapUint32StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32StringV(v, e)
case *map[uint32]string:
- fastpathTV.EncMapUint32StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32StringV(*v, e)
case map[uint32]uint:
- fastpathTV.EncMapUint32UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32UintV(v, e)
case *map[uint32]uint:
- fastpathTV.EncMapUint32UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32UintV(*v, e)
case map[uint32]uint8:
- fastpathTV.EncMapUint32Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint8V(v, e)
case *map[uint32]uint8:
- fastpathTV.EncMapUint32Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint8V(*v, e)
case map[uint32]uint16:
- fastpathTV.EncMapUint32Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint16V(v, e)
case *map[uint32]uint16:
- fastpathTV.EncMapUint32Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint16V(*v, e)
case map[uint32]uint32:
- fastpathTV.EncMapUint32Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint32V(v, e)
case *map[uint32]uint32:
- fastpathTV.EncMapUint32Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint32V(*v, e)
case map[uint32]uint64:
- fastpathTV.EncMapUint32Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint64V(v, e)
case *map[uint32]uint64:
- fastpathTV.EncMapUint32Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint64V(*v, e)
case map[uint32]uintptr:
- fastpathTV.EncMapUint32UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32UintptrV(v, e)
case *map[uint32]uintptr:
- fastpathTV.EncMapUint32UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32UintptrV(*v, e)
case map[uint32]int:
- fastpathTV.EncMapUint32IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32IntV(v, e)
case *map[uint32]int:
- fastpathTV.EncMapUint32IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32IntV(*v, e)
case map[uint32]int8:
- fastpathTV.EncMapUint32Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int8V(v, e)
case *map[uint32]int8:
- fastpathTV.EncMapUint32Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int8V(*v, e)
case map[uint32]int16:
- fastpathTV.EncMapUint32Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int16V(v, e)
case *map[uint32]int16:
- fastpathTV.EncMapUint32Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int16V(*v, e)
case map[uint32]int32:
- fastpathTV.EncMapUint32Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int32V(v, e)
case *map[uint32]int32:
- fastpathTV.EncMapUint32Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int32V(*v, e)
case map[uint32]int64:
- fastpathTV.EncMapUint32Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int64V(v, e)
case *map[uint32]int64:
- fastpathTV.EncMapUint32Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int64V(*v, e)
case map[uint32]float32:
- fastpathTV.EncMapUint32Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Float32V(v, e)
case *map[uint32]float32:
- fastpathTV.EncMapUint32Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Float32V(*v, e)
case map[uint32]float64:
- fastpathTV.EncMapUint32Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Float64V(v, e)
case *map[uint32]float64:
- fastpathTV.EncMapUint32Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Float64V(*v, e)
case map[uint32]bool:
- fastpathTV.EncMapUint32BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32BoolV(v, e)
case *map[uint32]bool:
- fastpathTV.EncMapUint32BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32BoolV(*v, e)
case []uint64:
- fastpathTV.EncSliceUint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUint64V(v, e)
case *[]uint64:
- fastpathTV.EncSliceUint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUint64V(*v, e)
case map[uint64]interface{}:
- fastpathTV.EncMapUint64IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64IntfV(v, e)
case *map[uint64]interface{}:
- fastpathTV.EncMapUint64IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64IntfV(*v, e)
case map[uint64]string:
- fastpathTV.EncMapUint64StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64StringV(v, e)
case *map[uint64]string:
- fastpathTV.EncMapUint64StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64StringV(*v, e)
case map[uint64]uint:
- fastpathTV.EncMapUint64UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64UintV(v, e)
case *map[uint64]uint:
- fastpathTV.EncMapUint64UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64UintV(*v, e)
case map[uint64]uint8:
- fastpathTV.EncMapUint64Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint8V(v, e)
case *map[uint64]uint8:
- fastpathTV.EncMapUint64Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint8V(*v, e)
case map[uint64]uint16:
- fastpathTV.EncMapUint64Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint16V(v, e)
case *map[uint64]uint16:
- fastpathTV.EncMapUint64Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint16V(*v, e)
case map[uint64]uint32:
- fastpathTV.EncMapUint64Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint32V(v, e)
case *map[uint64]uint32:
- fastpathTV.EncMapUint64Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint32V(*v, e)
case map[uint64]uint64:
- fastpathTV.EncMapUint64Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint64V(v, e)
case *map[uint64]uint64:
- fastpathTV.EncMapUint64Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint64V(*v, e)
case map[uint64]uintptr:
- fastpathTV.EncMapUint64UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64UintptrV(v, e)
case *map[uint64]uintptr:
- fastpathTV.EncMapUint64UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64UintptrV(*v, e)
case map[uint64]int:
- fastpathTV.EncMapUint64IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64IntV(v, e)
case *map[uint64]int:
- fastpathTV.EncMapUint64IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64IntV(*v, e)
case map[uint64]int8:
- fastpathTV.EncMapUint64Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int8V(v, e)
case *map[uint64]int8:
- fastpathTV.EncMapUint64Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int8V(*v, e)
case map[uint64]int16:
- fastpathTV.EncMapUint64Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int16V(v, e)
case *map[uint64]int16:
- fastpathTV.EncMapUint64Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int16V(*v, e)
case map[uint64]int32:
- fastpathTV.EncMapUint64Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int32V(v, e)
case *map[uint64]int32:
- fastpathTV.EncMapUint64Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int32V(*v, e)
case map[uint64]int64:
- fastpathTV.EncMapUint64Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int64V(v, e)
case *map[uint64]int64:
- fastpathTV.EncMapUint64Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int64V(*v, e)
case map[uint64]float32:
- fastpathTV.EncMapUint64Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Float32V(v, e)
case *map[uint64]float32:
- fastpathTV.EncMapUint64Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Float32V(*v, e)
case map[uint64]float64:
- fastpathTV.EncMapUint64Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Float64V(v, e)
case *map[uint64]float64:
- fastpathTV.EncMapUint64Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Float64V(*v, e)
case map[uint64]bool:
- fastpathTV.EncMapUint64BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64BoolV(v, e)
case *map[uint64]bool:
- fastpathTV.EncMapUint64BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64BoolV(*v, e)
case []uintptr:
- fastpathTV.EncSliceUintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUintptrV(v, e)
case *[]uintptr:
- fastpathTV.EncSliceUintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUintptrV(*v, e)
case map[uintptr]interface{}:
- fastpathTV.EncMapUintptrIntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrIntfV(v, e)
case *map[uintptr]interface{}:
- fastpathTV.EncMapUintptrIntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrIntfV(*v, e)
case map[uintptr]string:
- fastpathTV.EncMapUintptrStringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrStringV(v, e)
case *map[uintptr]string:
- fastpathTV.EncMapUintptrStringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrStringV(*v, e)
case map[uintptr]uint:
- fastpathTV.EncMapUintptrUintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUintV(v, e)
case *map[uintptr]uint:
- fastpathTV.EncMapUintptrUintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUintV(*v, e)
case map[uintptr]uint8:
- fastpathTV.EncMapUintptrUint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint8V(v, e)
case *map[uintptr]uint8:
- fastpathTV.EncMapUintptrUint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint8V(*v, e)
case map[uintptr]uint16:
- fastpathTV.EncMapUintptrUint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint16V(v, e)
case *map[uintptr]uint16:
- fastpathTV.EncMapUintptrUint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint16V(*v, e)
case map[uintptr]uint32:
- fastpathTV.EncMapUintptrUint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint32V(v, e)
case *map[uintptr]uint32:
- fastpathTV.EncMapUintptrUint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint32V(*v, e)
case map[uintptr]uint64:
- fastpathTV.EncMapUintptrUint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint64V(v, e)
case *map[uintptr]uint64:
- fastpathTV.EncMapUintptrUint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint64V(*v, e)
case map[uintptr]uintptr:
- fastpathTV.EncMapUintptrUintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUintptrV(v, e)
case *map[uintptr]uintptr:
- fastpathTV.EncMapUintptrUintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUintptrV(*v, e)
case map[uintptr]int:
- fastpathTV.EncMapUintptrIntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrIntV(v, e)
case *map[uintptr]int:
- fastpathTV.EncMapUintptrIntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrIntV(*v, e)
case map[uintptr]int8:
- fastpathTV.EncMapUintptrInt8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt8V(v, e)
case *map[uintptr]int8:
- fastpathTV.EncMapUintptrInt8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt8V(*v, e)
case map[uintptr]int16:
- fastpathTV.EncMapUintptrInt16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt16V(v, e)
case *map[uintptr]int16:
- fastpathTV.EncMapUintptrInt16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt16V(*v, e)
case map[uintptr]int32:
- fastpathTV.EncMapUintptrInt32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt32V(v, e)
case *map[uintptr]int32:
- fastpathTV.EncMapUintptrInt32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt32V(*v, e)
case map[uintptr]int64:
- fastpathTV.EncMapUintptrInt64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt64V(v, e)
case *map[uintptr]int64:
- fastpathTV.EncMapUintptrInt64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt64V(*v, e)
case map[uintptr]float32:
- fastpathTV.EncMapUintptrFloat32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrFloat32V(v, e)
case *map[uintptr]float32:
- fastpathTV.EncMapUintptrFloat32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrFloat32V(*v, e)
case map[uintptr]float64:
- fastpathTV.EncMapUintptrFloat64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrFloat64V(v, e)
case *map[uintptr]float64:
- fastpathTV.EncMapUintptrFloat64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrFloat64V(*v, e)
case map[uintptr]bool:
- fastpathTV.EncMapUintptrBoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrBoolV(v, e)
case *map[uintptr]bool:
- fastpathTV.EncMapUintptrBoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrBoolV(*v, e)
case []int:
- fastpathTV.EncSliceIntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceIntV(v, e)
case *[]int:
- fastpathTV.EncSliceIntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceIntV(*v, e)
case map[int]interface{}:
- fastpathTV.EncMapIntIntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntIntfV(v, e)
case *map[int]interface{}:
- fastpathTV.EncMapIntIntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntIntfV(*v, e)
case map[int]string:
- fastpathTV.EncMapIntStringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntStringV(v, e)
case *map[int]string:
- fastpathTV.EncMapIntStringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntStringV(*v, e)
case map[int]uint:
- fastpathTV.EncMapIntUintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUintV(v, e)
case *map[int]uint:
- fastpathTV.EncMapIntUintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUintV(*v, e)
case map[int]uint8:
- fastpathTV.EncMapIntUint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint8V(v, e)
case *map[int]uint8:
- fastpathTV.EncMapIntUint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint8V(*v, e)
case map[int]uint16:
- fastpathTV.EncMapIntUint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint16V(v, e)
case *map[int]uint16:
- fastpathTV.EncMapIntUint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint16V(*v, e)
case map[int]uint32:
- fastpathTV.EncMapIntUint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint32V(v, e)
case *map[int]uint32:
- fastpathTV.EncMapIntUint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint32V(*v, e)
case map[int]uint64:
- fastpathTV.EncMapIntUint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint64V(v, e)
case *map[int]uint64:
- fastpathTV.EncMapIntUint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint64V(*v, e)
case map[int]uintptr:
- fastpathTV.EncMapIntUintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUintptrV(v, e)
case *map[int]uintptr:
- fastpathTV.EncMapIntUintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUintptrV(*v, e)
case map[int]int:
- fastpathTV.EncMapIntIntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntIntV(v, e)
case *map[int]int:
- fastpathTV.EncMapIntIntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntIntV(*v, e)
case map[int]int8:
- fastpathTV.EncMapIntInt8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt8V(v, e)
case *map[int]int8:
- fastpathTV.EncMapIntInt8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt8V(*v, e)
case map[int]int16:
- fastpathTV.EncMapIntInt16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt16V(v, e)
case *map[int]int16:
- fastpathTV.EncMapIntInt16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt16V(*v, e)
case map[int]int32:
- fastpathTV.EncMapIntInt32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt32V(v, e)
case *map[int]int32:
- fastpathTV.EncMapIntInt32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt32V(*v, e)
case map[int]int64:
- fastpathTV.EncMapIntInt64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt64V(v, e)
case *map[int]int64:
- fastpathTV.EncMapIntInt64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt64V(*v, e)
case map[int]float32:
- fastpathTV.EncMapIntFloat32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntFloat32V(v, e)
case *map[int]float32:
- fastpathTV.EncMapIntFloat32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntFloat32V(*v, e)
case map[int]float64:
- fastpathTV.EncMapIntFloat64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntFloat64V(v, e)
case *map[int]float64:
- fastpathTV.EncMapIntFloat64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntFloat64V(*v, e)
case map[int]bool:
- fastpathTV.EncMapIntBoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntBoolV(v, e)
case *map[int]bool:
- fastpathTV.EncMapIntBoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntBoolV(*v, e)
case []int8:
- fastpathTV.EncSliceInt8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt8V(v, e)
case *[]int8:
- fastpathTV.EncSliceInt8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt8V(*v, e)
case map[int8]interface{}:
- fastpathTV.EncMapInt8IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8IntfV(v, e)
case *map[int8]interface{}:
- fastpathTV.EncMapInt8IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8IntfV(*v, e)
case map[int8]string:
- fastpathTV.EncMapInt8StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8StringV(v, e)
case *map[int8]string:
- fastpathTV.EncMapInt8StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8StringV(*v, e)
case map[int8]uint:
- fastpathTV.EncMapInt8UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8UintV(v, e)
case *map[int8]uint:
- fastpathTV.EncMapInt8UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8UintV(*v, e)
case map[int8]uint8:
- fastpathTV.EncMapInt8Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint8V(v, e)
case *map[int8]uint8:
- fastpathTV.EncMapInt8Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint8V(*v, e)
case map[int8]uint16:
- fastpathTV.EncMapInt8Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint16V(v, e)
case *map[int8]uint16:
- fastpathTV.EncMapInt8Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint16V(*v, e)
case map[int8]uint32:
- fastpathTV.EncMapInt8Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint32V(v, e)
case *map[int8]uint32:
- fastpathTV.EncMapInt8Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint32V(*v, e)
case map[int8]uint64:
- fastpathTV.EncMapInt8Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint64V(v, e)
case *map[int8]uint64:
- fastpathTV.EncMapInt8Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint64V(*v, e)
case map[int8]uintptr:
- fastpathTV.EncMapInt8UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8UintptrV(v, e)
case *map[int8]uintptr:
- fastpathTV.EncMapInt8UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8UintptrV(*v, e)
case map[int8]int:
- fastpathTV.EncMapInt8IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8IntV(v, e)
case *map[int8]int:
- fastpathTV.EncMapInt8IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8IntV(*v, e)
case map[int8]int8:
- fastpathTV.EncMapInt8Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int8V(v, e)
case *map[int8]int8:
- fastpathTV.EncMapInt8Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int8V(*v, e)
case map[int8]int16:
- fastpathTV.EncMapInt8Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int16V(v, e)
case *map[int8]int16:
- fastpathTV.EncMapInt8Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int16V(*v, e)
case map[int8]int32:
- fastpathTV.EncMapInt8Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int32V(v, e)
case *map[int8]int32:
- fastpathTV.EncMapInt8Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int32V(*v, e)
case map[int8]int64:
- fastpathTV.EncMapInt8Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int64V(v, e)
case *map[int8]int64:
- fastpathTV.EncMapInt8Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int64V(*v, e)
case map[int8]float32:
- fastpathTV.EncMapInt8Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Float32V(v, e)
case *map[int8]float32:
- fastpathTV.EncMapInt8Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Float32V(*v, e)
case map[int8]float64:
- fastpathTV.EncMapInt8Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Float64V(v, e)
case *map[int8]float64:
- fastpathTV.EncMapInt8Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Float64V(*v, e)
case map[int8]bool:
- fastpathTV.EncMapInt8BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8BoolV(v, e)
case *map[int8]bool:
- fastpathTV.EncMapInt8BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8BoolV(*v, e)
case []int16:
- fastpathTV.EncSliceInt16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt16V(v, e)
case *[]int16:
- fastpathTV.EncSliceInt16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt16V(*v, e)
case map[int16]interface{}:
- fastpathTV.EncMapInt16IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16IntfV(v, e)
case *map[int16]interface{}:
- fastpathTV.EncMapInt16IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16IntfV(*v, e)
case map[int16]string:
- fastpathTV.EncMapInt16StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16StringV(v, e)
case *map[int16]string:
- fastpathTV.EncMapInt16StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16StringV(*v, e)
case map[int16]uint:
- fastpathTV.EncMapInt16UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16UintV(v, e)
case *map[int16]uint:
- fastpathTV.EncMapInt16UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16UintV(*v, e)
case map[int16]uint8:
- fastpathTV.EncMapInt16Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint8V(v, e)
case *map[int16]uint8:
- fastpathTV.EncMapInt16Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint8V(*v, e)
case map[int16]uint16:
- fastpathTV.EncMapInt16Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint16V(v, e)
case *map[int16]uint16:
- fastpathTV.EncMapInt16Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint16V(*v, e)
case map[int16]uint32:
- fastpathTV.EncMapInt16Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint32V(v, e)
case *map[int16]uint32:
- fastpathTV.EncMapInt16Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint32V(*v, e)
case map[int16]uint64:
- fastpathTV.EncMapInt16Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint64V(v, e)
case *map[int16]uint64:
- fastpathTV.EncMapInt16Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint64V(*v, e)
case map[int16]uintptr:
- fastpathTV.EncMapInt16UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16UintptrV(v, e)
case *map[int16]uintptr:
- fastpathTV.EncMapInt16UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16UintptrV(*v, e)
case map[int16]int:
- fastpathTV.EncMapInt16IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16IntV(v, e)
case *map[int16]int:
- fastpathTV.EncMapInt16IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16IntV(*v, e)
case map[int16]int8:
- fastpathTV.EncMapInt16Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int8V(v, e)
case *map[int16]int8:
- fastpathTV.EncMapInt16Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int8V(*v, e)
case map[int16]int16:
- fastpathTV.EncMapInt16Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int16V(v, e)
case *map[int16]int16:
- fastpathTV.EncMapInt16Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int16V(*v, e)
case map[int16]int32:
- fastpathTV.EncMapInt16Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int32V(v, e)
case *map[int16]int32:
- fastpathTV.EncMapInt16Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int32V(*v, e)
case map[int16]int64:
- fastpathTV.EncMapInt16Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int64V(v, e)
case *map[int16]int64:
- fastpathTV.EncMapInt16Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int64V(*v, e)
case map[int16]float32:
- fastpathTV.EncMapInt16Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Float32V(v, e)
case *map[int16]float32:
- fastpathTV.EncMapInt16Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Float32V(*v, e)
case map[int16]float64:
- fastpathTV.EncMapInt16Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Float64V(v, e)
case *map[int16]float64:
- fastpathTV.EncMapInt16Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Float64V(*v, e)
case map[int16]bool:
- fastpathTV.EncMapInt16BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16BoolV(v, e)
case *map[int16]bool:
- fastpathTV.EncMapInt16BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16BoolV(*v, e)
case []int32:
- fastpathTV.EncSliceInt32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt32V(v, e)
case *[]int32:
- fastpathTV.EncSliceInt32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt32V(*v, e)
case map[int32]interface{}:
- fastpathTV.EncMapInt32IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32IntfV(v, e)
case *map[int32]interface{}:
- fastpathTV.EncMapInt32IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32IntfV(*v, e)
case map[int32]string:
- fastpathTV.EncMapInt32StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32StringV(v, e)
case *map[int32]string:
- fastpathTV.EncMapInt32StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32StringV(*v, e)
case map[int32]uint:
- fastpathTV.EncMapInt32UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32UintV(v, e)
case *map[int32]uint:
- fastpathTV.EncMapInt32UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32UintV(*v, e)
case map[int32]uint8:
- fastpathTV.EncMapInt32Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint8V(v, e)
case *map[int32]uint8:
- fastpathTV.EncMapInt32Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint8V(*v, e)
case map[int32]uint16:
- fastpathTV.EncMapInt32Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint16V(v, e)
case *map[int32]uint16:
- fastpathTV.EncMapInt32Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint16V(*v, e)
case map[int32]uint32:
- fastpathTV.EncMapInt32Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint32V(v, e)
case *map[int32]uint32:
- fastpathTV.EncMapInt32Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint32V(*v, e)
case map[int32]uint64:
- fastpathTV.EncMapInt32Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint64V(v, e)
case *map[int32]uint64:
- fastpathTV.EncMapInt32Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint64V(*v, e)
case map[int32]uintptr:
- fastpathTV.EncMapInt32UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32UintptrV(v, e)
case *map[int32]uintptr:
- fastpathTV.EncMapInt32UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32UintptrV(*v, e)
case map[int32]int:
- fastpathTV.EncMapInt32IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32IntV(v, e)
case *map[int32]int:
- fastpathTV.EncMapInt32IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32IntV(*v, e)
case map[int32]int8:
- fastpathTV.EncMapInt32Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int8V(v, e)
case *map[int32]int8:
- fastpathTV.EncMapInt32Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int8V(*v, e)
case map[int32]int16:
- fastpathTV.EncMapInt32Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int16V(v, e)
case *map[int32]int16:
- fastpathTV.EncMapInt32Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int16V(*v, e)
case map[int32]int32:
- fastpathTV.EncMapInt32Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int32V(v, e)
case *map[int32]int32:
- fastpathTV.EncMapInt32Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int32V(*v, e)
case map[int32]int64:
- fastpathTV.EncMapInt32Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int64V(v, e)
case *map[int32]int64:
- fastpathTV.EncMapInt32Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int64V(*v, e)
case map[int32]float32:
- fastpathTV.EncMapInt32Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Float32V(v, e)
case *map[int32]float32:
- fastpathTV.EncMapInt32Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Float32V(*v, e)
case map[int32]float64:
- fastpathTV.EncMapInt32Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Float64V(v, e)
case *map[int32]float64:
- fastpathTV.EncMapInt32Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Float64V(*v, e)
case map[int32]bool:
- fastpathTV.EncMapInt32BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32BoolV(v, e)
case *map[int32]bool:
- fastpathTV.EncMapInt32BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32BoolV(*v, e)
case []int64:
- fastpathTV.EncSliceInt64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt64V(v, e)
case *[]int64:
- fastpathTV.EncSliceInt64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt64V(*v, e)
case map[int64]interface{}:
- fastpathTV.EncMapInt64IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64IntfV(v, e)
case *map[int64]interface{}:
- fastpathTV.EncMapInt64IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64IntfV(*v, e)
case map[int64]string:
- fastpathTV.EncMapInt64StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64StringV(v, e)
case *map[int64]string:
- fastpathTV.EncMapInt64StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64StringV(*v, e)
case map[int64]uint:
- fastpathTV.EncMapInt64UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64UintV(v, e)
case *map[int64]uint:
- fastpathTV.EncMapInt64UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64UintV(*v, e)
case map[int64]uint8:
- fastpathTV.EncMapInt64Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint8V(v, e)
case *map[int64]uint8:
- fastpathTV.EncMapInt64Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint8V(*v, e)
case map[int64]uint16:
- fastpathTV.EncMapInt64Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint16V(v, e)
case *map[int64]uint16:
- fastpathTV.EncMapInt64Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint16V(*v, e)
case map[int64]uint32:
- fastpathTV.EncMapInt64Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint32V(v, e)
case *map[int64]uint32:
- fastpathTV.EncMapInt64Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint32V(*v, e)
case map[int64]uint64:
- fastpathTV.EncMapInt64Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint64V(v, e)
case *map[int64]uint64:
- fastpathTV.EncMapInt64Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint64V(*v, e)
case map[int64]uintptr:
- fastpathTV.EncMapInt64UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64UintptrV(v, e)
case *map[int64]uintptr:
- fastpathTV.EncMapInt64UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64UintptrV(*v, e)
case map[int64]int:
- fastpathTV.EncMapInt64IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64IntV(v, e)
case *map[int64]int:
- fastpathTV.EncMapInt64IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64IntV(*v, e)
case map[int64]int8:
- fastpathTV.EncMapInt64Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int8V(v, e)
case *map[int64]int8:
- fastpathTV.EncMapInt64Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int8V(*v, e)
case map[int64]int16:
- fastpathTV.EncMapInt64Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int16V(v, e)
case *map[int64]int16:
- fastpathTV.EncMapInt64Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int16V(*v, e)
case map[int64]int32:
- fastpathTV.EncMapInt64Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int32V(v, e)
case *map[int64]int32:
- fastpathTV.EncMapInt64Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int32V(*v, e)
case map[int64]int64:
- fastpathTV.EncMapInt64Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int64V(v, e)
case *map[int64]int64:
- fastpathTV.EncMapInt64Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int64V(*v, e)
case map[int64]float32:
- fastpathTV.EncMapInt64Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Float32V(v, e)
case *map[int64]float32:
- fastpathTV.EncMapInt64Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Float32V(*v, e)
case map[int64]float64:
- fastpathTV.EncMapInt64Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Float64V(v, e)
case *map[int64]float64:
- fastpathTV.EncMapInt64Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Float64V(*v, e)
case map[int64]bool:
- fastpathTV.EncMapInt64BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64BoolV(v, e)
case *map[int64]bool:
- fastpathTV.EncMapInt64BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64BoolV(*v, e)
case []bool:
- fastpathTV.EncSliceBoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceBoolV(v, e)
case *[]bool:
- fastpathTV.EncSliceBoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceBoolV(*v, e)
case map[bool]interface{}:
- fastpathTV.EncMapBoolIntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolIntfV(v, e)
case *map[bool]interface{}:
- fastpathTV.EncMapBoolIntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolIntfV(*v, e)
case map[bool]string:
- fastpathTV.EncMapBoolStringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolStringV(v, e)
case *map[bool]string:
- fastpathTV.EncMapBoolStringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolStringV(*v, e)
case map[bool]uint:
- fastpathTV.EncMapBoolUintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUintV(v, e)
case *map[bool]uint:
- fastpathTV.EncMapBoolUintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUintV(*v, e)
case map[bool]uint8:
- fastpathTV.EncMapBoolUint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint8V(v, e)
case *map[bool]uint8:
- fastpathTV.EncMapBoolUint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint8V(*v, e)
case map[bool]uint16:
- fastpathTV.EncMapBoolUint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint16V(v, e)
case *map[bool]uint16:
- fastpathTV.EncMapBoolUint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint16V(*v, e)
case map[bool]uint32:
- fastpathTV.EncMapBoolUint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint32V(v, e)
case *map[bool]uint32:
- fastpathTV.EncMapBoolUint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint32V(*v, e)
case map[bool]uint64:
- fastpathTV.EncMapBoolUint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint64V(v, e)
case *map[bool]uint64:
- fastpathTV.EncMapBoolUint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint64V(*v, e)
case map[bool]uintptr:
- fastpathTV.EncMapBoolUintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUintptrV(v, e)
case *map[bool]uintptr:
- fastpathTV.EncMapBoolUintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUintptrV(*v, e)
case map[bool]int:
- fastpathTV.EncMapBoolIntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolIntV(v, e)
case *map[bool]int:
- fastpathTV.EncMapBoolIntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolIntV(*v, e)
case map[bool]int8:
- fastpathTV.EncMapBoolInt8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt8V(v, e)
case *map[bool]int8:
- fastpathTV.EncMapBoolInt8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt8V(*v, e)
case map[bool]int16:
- fastpathTV.EncMapBoolInt16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt16V(v, e)
case *map[bool]int16:
- fastpathTV.EncMapBoolInt16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt16V(*v, e)
case map[bool]int32:
- fastpathTV.EncMapBoolInt32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt32V(v, e)
case *map[bool]int32:
- fastpathTV.EncMapBoolInt32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt32V(*v, e)
case map[bool]int64:
- fastpathTV.EncMapBoolInt64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt64V(v, e)
case *map[bool]int64:
- fastpathTV.EncMapBoolInt64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt64V(*v, e)
case map[bool]float32:
- fastpathTV.EncMapBoolFloat32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolFloat32V(v, e)
case *map[bool]float32:
- fastpathTV.EncMapBoolFloat32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolFloat32V(*v, e)
case map[bool]float64:
- fastpathTV.EncMapBoolFloat64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolFloat64V(v, e)
case *map[bool]float64:
- fastpathTV.EncMapBoolFloat64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolFloat64V(*v, e)
case map[bool]bool:
- fastpathTV.EncMapBoolBoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolBoolV(v, e)
case *map[bool]bool:
- fastpathTV.EncMapBoolBoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolBoolV(*v, e)
default:
_ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release)
@@ -1741,85 +1740,82 @@ func fastpathEncodeTypeSwitch(iv interface{}, e *Encoder) bool {
}
func fastpathEncodeTypeSwitchSlice(iv interface{}, e *Encoder) bool {
- if !fastpathEnabled {
- return false
- }
switch v := iv.(type) {
case []interface{}:
- fastpathTV.EncSliceIntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceIntfV(v, e)
case *[]interface{}:
- fastpathTV.EncSliceIntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceIntfV(*v, e)
case []string:
- fastpathTV.EncSliceStringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceStringV(v, e)
case *[]string:
- fastpathTV.EncSliceStringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceStringV(*v, e)
case []float32:
- fastpathTV.EncSliceFloat32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceFloat32V(v, e)
case *[]float32:
- fastpathTV.EncSliceFloat32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceFloat32V(*v, e)
case []float64:
- fastpathTV.EncSliceFloat64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceFloat64V(v, e)
case *[]float64:
- fastpathTV.EncSliceFloat64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceFloat64V(*v, e)
case []uint:
- fastpathTV.EncSliceUintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUintV(v, e)
case *[]uint:
- fastpathTV.EncSliceUintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUintV(*v, e)
case []uint16:
- fastpathTV.EncSliceUint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUint16V(v, e)
case *[]uint16:
- fastpathTV.EncSliceUint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUint16V(*v, e)
case []uint32:
- fastpathTV.EncSliceUint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUint32V(v, e)
case *[]uint32:
- fastpathTV.EncSliceUint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUint32V(*v, e)
case []uint64:
- fastpathTV.EncSliceUint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUint64V(v, e)
case *[]uint64:
- fastpathTV.EncSliceUint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUint64V(*v, e)
case []uintptr:
- fastpathTV.EncSliceUintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUintptrV(v, e)
case *[]uintptr:
- fastpathTV.EncSliceUintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceUintptrV(*v, e)
case []int:
- fastpathTV.EncSliceIntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceIntV(v, e)
case *[]int:
- fastpathTV.EncSliceIntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceIntV(*v, e)
case []int8:
- fastpathTV.EncSliceInt8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt8V(v, e)
case *[]int8:
- fastpathTV.EncSliceInt8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt8V(*v, e)
case []int16:
- fastpathTV.EncSliceInt16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt16V(v, e)
case *[]int16:
- fastpathTV.EncSliceInt16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt16V(*v, e)
case []int32:
- fastpathTV.EncSliceInt32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt32V(v, e)
case *[]int32:
- fastpathTV.EncSliceInt32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt32V(*v, e)
case []int64:
- fastpathTV.EncSliceInt64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt64V(v, e)
case *[]int64:
- fastpathTV.EncSliceInt64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceInt64V(*v, e)
case []bool:
- fastpathTV.EncSliceBoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceBoolV(v, e)
case *[]bool:
- fastpathTV.EncSliceBoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncSliceBoolV(*v, e)
default:
_ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release)
@@ -1829,1290 +1825,1287 @@ func fastpathEncodeTypeSwitchSlice(iv interface{}, e *Encoder) bool {
}
func fastpathEncodeTypeSwitchMap(iv interface{}, e *Encoder) bool {
- if !fastpathEnabled {
- return false
- }
switch v := iv.(type) {
case map[interface{}]interface{}:
- fastpathTV.EncMapIntfIntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfIntfV(v, e)
case *map[interface{}]interface{}:
- fastpathTV.EncMapIntfIntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfIntfV(*v, e)
case map[interface{}]string:
- fastpathTV.EncMapIntfStringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfStringV(v, e)
case *map[interface{}]string:
- fastpathTV.EncMapIntfStringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfStringV(*v, e)
case map[interface{}]uint:
- fastpathTV.EncMapIntfUintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUintV(v, e)
case *map[interface{}]uint:
- fastpathTV.EncMapIntfUintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUintV(*v, e)
case map[interface{}]uint8:
- fastpathTV.EncMapIntfUint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint8V(v, e)
case *map[interface{}]uint8:
- fastpathTV.EncMapIntfUint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint8V(*v, e)
case map[interface{}]uint16:
- fastpathTV.EncMapIntfUint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint16V(v, e)
case *map[interface{}]uint16:
- fastpathTV.EncMapIntfUint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint16V(*v, e)
case map[interface{}]uint32:
- fastpathTV.EncMapIntfUint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint32V(v, e)
case *map[interface{}]uint32:
- fastpathTV.EncMapIntfUint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint32V(*v, e)
case map[interface{}]uint64:
- fastpathTV.EncMapIntfUint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint64V(v, e)
case *map[interface{}]uint64:
- fastpathTV.EncMapIntfUint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUint64V(*v, e)
case map[interface{}]uintptr:
- fastpathTV.EncMapIntfUintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUintptrV(v, e)
case *map[interface{}]uintptr:
- fastpathTV.EncMapIntfUintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfUintptrV(*v, e)
case map[interface{}]int:
- fastpathTV.EncMapIntfIntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfIntV(v, e)
case *map[interface{}]int:
- fastpathTV.EncMapIntfIntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfIntV(*v, e)
case map[interface{}]int8:
- fastpathTV.EncMapIntfInt8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt8V(v, e)
case *map[interface{}]int8:
- fastpathTV.EncMapIntfInt8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt8V(*v, e)
case map[interface{}]int16:
- fastpathTV.EncMapIntfInt16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt16V(v, e)
case *map[interface{}]int16:
- fastpathTV.EncMapIntfInt16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt16V(*v, e)
case map[interface{}]int32:
- fastpathTV.EncMapIntfInt32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt32V(v, e)
case *map[interface{}]int32:
- fastpathTV.EncMapIntfInt32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt32V(*v, e)
case map[interface{}]int64:
- fastpathTV.EncMapIntfInt64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt64V(v, e)
case *map[interface{}]int64:
- fastpathTV.EncMapIntfInt64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfInt64V(*v, e)
case map[interface{}]float32:
- fastpathTV.EncMapIntfFloat32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfFloat32V(v, e)
case *map[interface{}]float32:
- fastpathTV.EncMapIntfFloat32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfFloat32V(*v, e)
case map[interface{}]float64:
- fastpathTV.EncMapIntfFloat64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfFloat64V(v, e)
case *map[interface{}]float64:
- fastpathTV.EncMapIntfFloat64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfFloat64V(*v, e)
case map[interface{}]bool:
- fastpathTV.EncMapIntfBoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfBoolV(v, e)
case *map[interface{}]bool:
- fastpathTV.EncMapIntfBoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntfBoolV(*v, e)
case map[string]interface{}:
- fastpathTV.EncMapStringIntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringIntfV(v, e)
case *map[string]interface{}:
- fastpathTV.EncMapStringIntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringIntfV(*v, e)
case map[string]string:
- fastpathTV.EncMapStringStringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringStringV(v, e)
case *map[string]string:
- fastpathTV.EncMapStringStringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringStringV(*v, e)
case map[string]uint:
- fastpathTV.EncMapStringUintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUintV(v, e)
case *map[string]uint:
- fastpathTV.EncMapStringUintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUintV(*v, e)
case map[string]uint8:
- fastpathTV.EncMapStringUint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint8V(v, e)
case *map[string]uint8:
- fastpathTV.EncMapStringUint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint8V(*v, e)
case map[string]uint16:
- fastpathTV.EncMapStringUint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint16V(v, e)
case *map[string]uint16:
- fastpathTV.EncMapStringUint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint16V(*v, e)
case map[string]uint32:
- fastpathTV.EncMapStringUint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint32V(v, e)
case *map[string]uint32:
- fastpathTV.EncMapStringUint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint32V(*v, e)
case map[string]uint64:
- fastpathTV.EncMapStringUint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint64V(v, e)
case *map[string]uint64:
- fastpathTV.EncMapStringUint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUint64V(*v, e)
case map[string]uintptr:
- fastpathTV.EncMapStringUintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUintptrV(v, e)
case *map[string]uintptr:
- fastpathTV.EncMapStringUintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringUintptrV(*v, e)
case map[string]int:
- fastpathTV.EncMapStringIntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringIntV(v, e)
case *map[string]int:
- fastpathTV.EncMapStringIntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringIntV(*v, e)
case map[string]int8:
- fastpathTV.EncMapStringInt8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt8V(v, e)
case *map[string]int8:
- fastpathTV.EncMapStringInt8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt8V(*v, e)
case map[string]int16:
- fastpathTV.EncMapStringInt16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt16V(v, e)
case *map[string]int16:
- fastpathTV.EncMapStringInt16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt16V(*v, e)
case map[string]int32:
- fastpathTV.EncMapStringInt32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt32V(v, e)
case *map[string]int32:
- fastpathTV.EncMapStringInt32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt32V(*v, e)
case map[string]int64:
- fastpathTV.EncMapStringInt64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt64V(v, e)
case *map[string]int64:
- fastpathTV.EncMapStringInt64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringInt64V(*v, e)
case map[string]float32:
- fastpathTV.EncMapStringFloat32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringFloat32V(v, e)
case *map[string]float32:
- fastpathTV.EncMapStringFloat32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringFloat32V(*v, e)
case map[string]float64:
- fastpathTV.EncMapStringFloat64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringFloat64V(v, e)
case *map[string]float64:
- fastpathTV.EncMapStringFloat64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringFloat64V(*v, e)
case map[string]bool:
- fastpathTV.EncMapStringBoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringBoolV(v, e)
case *map[string]bool:
- fastpathTV.EncMapStringBoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapStringBoolV(*v, e)
case map[float32]interface{}:
- fastpathTV.EncMapFloat32IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32IntfV(v, e)
case *map[float32]interface{}:
- fastpathTV.EncMapFloat32IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32IntfV(*v, e)
case map[float32]string:
- fastpathTV.EncMapFloat32StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32StringV(v, e)
case *map[float32]string:
- fastpathTV.EncMapFloat32StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32StringV(*v, e)
case map[float32]uint:
- fastpathTV.EncMapFloat32UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32UintV(v, e)
case *map[float32]uint:
- fastpathTV.EncMapFloat32UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32UintV(*v, e)
case map[float32]uint8:
- fastpathTV.EncMapFloat32Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint8V(v, e)
case *map[float32]uint8:
- fastpathTV.EncMapFloat32Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint8V(*v, e)
case map[float32]uint16:
- fastpathTV.EncMapFloat32Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint16V(v, e)
case *map[float32]uint16:
- fastpathTV.EncMapFloat32Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint16V(*v, e)
case map[float32]uint32:
- fastpathTV.EncMapFloat32Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint32V(v, e)
case *map[float32]uint32:
- fastpathTV.EncMapFloat32Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint32V(*v, e)
case map[float32]uint64:
- fastpathTV.EncMapFloat32Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint64V(v, e)
case *map[float32]uint64:
- fastpathTV.EncMapFloat32Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Uint64V(*v, e)
case map[float32]uintptr:
- fastpathTV.EncMapFloat32UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32UintptrV(v, e)
case *map[float32]uintptr:
- fastpathTV.EncMapFloat32UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32UintptrV(*v, e)
case map[float32]int:
- fastpathTV.EncMapFloat32IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32IntV(v, e)
case *map[float32]int:
- fastpathTV.EncMapFloat32IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32IntV(*v, e)
case map[float32]int8:
- fastpathTV.EncMapFloat32Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int8V(v, e)
case *map[float32]int8:
- fastpathTV.EncMapFloat32Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int8V(*v, e)
case map[float32]int16:
- fastpathTV.EncMapFloat32Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int16V(v, e)
case *map[float32]int16:
- fastpathTV.EncMapFloat32Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int16V(*v, e)
case map[float32]int32:
- fastpathTV.EncMapFloat32Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int32V(v, e)
case *map[float32]int32:
- fastpathTV.EncMapFloat32Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int32V(*v, e)
case map[float32]int64:
- fastpathTV.EncMapFloat32Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int64V(v, e)
case *map[float32]int64:
- fastpathTV.EncMapFloat32Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Int64V(*v, e)
case map[float32]float32:
- fastpathTV.EncMapFloat32Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Float32V(v, e)
case *map[float32]float32:
- fastpathTV.EncMapFloat32Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Float32V(*v, e)
case map[float32]float64:
- fastpathTV.EncMapFloat32Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Float64V(v, e)
case *map[float32]float64:
- fastpathTV.EncMapFloat32Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32Float64V(*v, e)
case map[float32]bool:
- fastpathTV.EncMapFloat32BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32BoolV(v, e)
case *map[float32]bool:
- fastpathTV.EncMapFloat32BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat32BoolV(*v, e)
case map[float64]interface{}:
- fastpathTV.EncMapFloat64IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64IntfV(v, e)
case *map[float64]interface{}:
- fastpathTV.EncMapFloat64IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64IntfV(*v, e)
case map[float64]string:
- fastpathTV.EncMapFloat64StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64StringV(v, e)
case *map[float64]string:
- fastpathTV.EncMapFloat64StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64StringV(*v, e)
case map[float64]uint:
- fastpathTV.EncMapFloat64UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64UintV(v, e)
case *map[float64]uint:
- fastpathTV.EncMapFloat64UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64UintV(*v, e)
case map[float64]uint8:
- fastpathTV.EncMapFloat64Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint8V(v, e)
case *map[float64]uint8:
- fastpathTV.EncMapFloat64Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint8V(*v, e)
case map[float64]uint16:
- fastpathTV.EncMapFloat64Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint16V(v, e)
case *map[float64]uint16:
- fastpathTV.EncMapFloat64Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint16V(*v, e)
case map[float64]uint32:
- fastpathTV.EncMapFloat64Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint32V(v, e)
case *map[float64]uint32:
- fastpathTV.EncMapFloat64Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint32V(*v, e)
case map[float64]uint64:
- fastpathTV.EncMapFloat64Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint64V(v, e)
case *map[float64]uint64:
- fastpathTV.EncMapFloat64Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Uint64V(*v, e)
case map[float64]uintptr:
- fastpathTV.EncMapFloat64UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64UintptrV(v, e)
case *map[float64]uintptr:
- fastpathTV.EncMapFloat64UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64UintptrV(*v, e)
case map[float64]int:
- fastpathTV.EncMapFloat64IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64IntV(v, e)
case *map[float64]int:
- fastpathTV.EncMapFloat64IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64IntV(*v, e)
case map[float64]int8:
- fastpathTV.EncMapFloat64Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int8V(v, e)
case *map[float64]int8:
- fastpathTV.EncMapFloat64Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int8V(*v, e)
case map[float64]int16:
- fastpathTV.EncMapFloat64Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int16V(v, e)
case *map[float64]int16:
- fastpathTV.EncMapFloat64Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int16V(*v, e)
case map[float64]int32:
- fastpathTV.EncMapFloat64Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int32V(v, e)
case *map[float64]int32:
- fastpathTV.EncMapFloat64Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int32V(*v, e)
case map[float64]int64:
- fastpathTV.EncMapFloat64Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int64V(v, e)
case *map[float64]int64:
- fastpathTV.EncMapFloat64Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Int64V(*v, e)
case map[float64]float32:
- fastpathTV.EncMapFloat64Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Float32V(v, e)
case *map[float64]float32:
- fastpathTV.EncMapFloat64Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Float32V(*v, e)
case map[float64]float64:
- fastpathTV.EncMapFloat64Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Float64V(v, e)
case *map[float64]float64:
- fastpathTV.EncMapFloat64Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64Float64V(*v, e)
case map[float64]bool:
- fastpathTV.EncMapFloat64BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64BoolV(v, e)
case *map[float64]bool:
- fastpathTV.EncMapFloat64BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapFloat64BoolV(*v, e)
case map[uint]interface{}:
- fastpathTV.EncMapUintIntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintIntfV(v, e)
case *map[uint]interface{}:
- fastpathTV.EncMapUintIntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintIntfV(*v, e)
case map[uint]string:
- fastpathTV.EncMapUintStringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintStringV(v, e)
case *map[uint]string:
- fastpathTV.EncMapUintStringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintStringV(*v, e)
case map[uint]uint:
- fastpathTV.EncMapUintUintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUintV(v, e)
case *map[uint]uint:
- fastpathTV.EncMapUintUintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUintV(*v, e)
case map[uint]uint8:
- fastpathTV.EncMapUintUint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint8V(v, e)
case *map[uint]uint8:
- fastpathTV.EncMapUintUint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint8V(*v, e)
case map[uint]uint16:
- fastpathTV.EncMapUintUint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint16V(v, e)
case *map[uint]uint16:
- fastpathTV.EncMapUintUint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint16V(*v, e)
case map[uint]uint32:
- fastpathTV.EncMapUintUint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint32V(v, e)
case *map[uint]uint32:
- fastpathTV.EncMapUintUint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint32V(*v, e)
case map[uint]uint64:
- fastpathTV.EncMapUintUint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint64V(v, e)
case *map[uint]uint64:
- fastpathTV.EncMapUintUint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUint64V(*v, e)
case map[uint]uintptr:
- fastpathTV.EncMapUintUintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUintptrV(v, e)
case *map[uint]uintptr:
- fastpathTV.EncMapUintUintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintUintptrV(*v, e)
case map[uint]int:
- fastpathTV.EncMapUintIntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintIntV(v, e)
case *map[uint]int:
- fastpathTV.EncMapUintIntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintIntV(*v, e)
case map[uint]int8:
- fastpathTV.EncMapUintInt8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt8V(v, e)
case *map[uint]int8:
- fastpathTV.EncMapUintInt8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt8V(*v, e)
case map[uint]int16:
- fastpathTV.EncMapUintInt16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt16V(v, e)
case *map[uint]int16:
- fastpathTV.EncMapUintInt16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt16V(*v, e)
case map[uint]int32:
- fastpathTV.EncMapUintInt32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt32V(v, e)
case *map[uint]int32:
- fastpathTV.EncMapUintInt32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt32V(*v, e)
case map[uint]int64:
- fastpathTV.EncMapUintInt64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt64V(v, e)
case *map[uint]int64:
- fastpathTV.EncMapUintInt64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintInt64V(*v, e)
case map[uint]float32:
- fastpathTV.EncMapUintFloat32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintFloat32V(v, e)
case *map[uint]float32:
- fastpathTV.EncMapUintFloat32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintFloat32V(*v, e)
case map[uint]float64:
- fastpathTV.EncMapUintFloat64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintFloat64V(v, e)
case *map[uint]float64:
- fastpathTV.EncMapUintFloat64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintFloat64V(*v, e)
case map[uint]bool:
- fastpathTV.EncMapUintBoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintBoolV(v, e)
case *map[uint]bool:
- fastpathTV.EncMapUintBoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintBoolV(*v, e)
case map[uint8]interface{}:
- fastpathTV.EncMapUint8IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8IntfV(v, e)
case *map[uint8]interface{}:
- fastpathTV.EncMapUint8IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8IntfV(*v, e)
case map[uint8]string:
- fastpathTV.EncMapUint8StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8StringV(v, e)
case *map[uint8]string:
- fastpathTV.EncMapUint8StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8StringV(*v, e)
case map[uint8]uint:
- fastpathTV.EncMapUint8UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8UintV(v, e)
case *map[uint8]uint:
- fastpathTV.EncMapUint8UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8UintV(*v, e)
case map[uint8]uint8:
- fastpathTV.EncMapUint8Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint8V(v, e)
case *map[uint8]uint8:
- fastpathTV.EncMapUint8Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint8V(*v, e)
case map[uint8]uint16:
- fastpathTV.EncMapUint8Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint16V(v, e)
case *map[uint8]uint16:
- fastpathTV.EncMapUint8Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint16V(*v, e)
case map[uint8]uint32:
- fastpathTV.EncMapUint8Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint32V(v, e)
case *map[uint8]uint32:
- fastpathTV.EncMapUint8Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint32V(*v, e)
case map[uint8]uint64:
- fastpathTV.EncMapUint8Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint64V(v, e)
case *map[uint8]uint64:
- fastpathTV.EncMapUint8Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Uint64V(*v, e)
case map[uint8]uintptr:
- fastpathTV.EncMapUint8UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8UintptrV(v, e)
case *map[uint8]uintptr:
- fastpathTV.EncMapUint8UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8UintptrV(*v, e)
case map[uint8]int:
- fastpathTV.EncMapUint8IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8IntV(v, e)
case *map[uint8]int:
- fastpathTV.EncMapUint8IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8IntV(*v, e)
case map[uint8]int8:
- fastpathTV.EncMapUint8Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int8V(v, e)
case *map[uint8]int8:
- fastpathTV.EncMapUint8Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int8V(*v, e)
case map[uint8]int16:
- fastpathTV.EncMapUint8Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int16V(v, e)
case *map[uint8]int16:
- fastpathTV.EncMapUint8Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int16V(*v, e)
case map[uint8]int32:
- fastpathTV.EncMapUint8Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int32V(v, e)
case *map[uint8]int32:
- fastpathTV.EncMapUint8Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int32V(*v, e)
case map[uint8]int64:
- fastpathTV.EncMapUint8Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int64V(v, e)
case *map[uint8]int64:
- fastpathTV.EncMapUint8Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Int64V(*v, e)
case map[uint8]float32:
- fastpathTV.EncMapUint8Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Float32V(v, e)
case *map[uint8]float32:
- fastpathTV.EncMapUint8Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Float32V(*v, e)
case map[uint8]float64:
- fastpathTV.EncMapUint8Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Float64V(v, e)
case *map[uint8]float64:
- fastpathTV.EncMapUint8Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8Float64V(*v, e)
case map[uint8]bool:
- fastpathTV.EncMapUint8BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8BoolV(v, e)
case *map[uint8]bool:
- fastpathTV.EncMapUint8BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint8BoolV(*v, e)
case map[uint16]interface{}:
- fastpathTV.EncMapUint16IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16IntfV(v, e)
case *map[uint16]interface{}:
- fastpathTV.EncMapUint16IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16IntfV(*v, e)
case map[uint16]string:
- fastpathTV.EncMapUint16StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16StringV(v, e)
case *map[uint16]string:
- fastpathTV.EncMapUint16StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16StringV(*v, e)
case map[uint16]uint:
- fastpathTV.EncMapUint16UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16UintV(v, e)
case *map[uint16]uint:
- fastpathTV.EncMapUint16UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16UintV(*v, e)
case map[uint16]uint8:
- fastpathTV.EncMapUint16Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint8V(v, e)
case *map[uint16]uint8:
- fastpathTV.EncMapUint16Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint8V(*v, e)
case map[uint16]uint16:
- fastpathTV.EncMapUint16Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint16V(v, e)
case *map[uint16]uint16:
- fastpathTV.EncMapUint16Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint16V(*v, e)
case map[uint16]uint32:
- fastpathTV.EncMapUint16Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint32V(v, e)
case *map[uint16]uint32:
- fastpathTV.EncMapUint16Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint32V(*v, e)
case map[uint16]uint64:
- fastpathTV.EncMapUint16Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint64V(v, e)
case *map[uint16]uint64:
- fastpathTV.EncMapUint16Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Uint64V(*v, e)
case map[uint16]uintptr:
- fastpathTV.EncMapUint16UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16UintptrV(v, e)
case *map[uint16]uintptr:
- fastpathTV.EncMapUint16UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16UintptrV(*v, e)
case map[uint16]int:
- fastpathTV.EncMapUint16IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16IntV(v, e)
case *map[uint16]int:
- fastpathTV.EncMapUint16IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16IntV(*v, e)
case map[uint16]int8:
- fastpathTV.EncMapUint16Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int8V(v, e)
case *map[uint16]int8:
- fastpathTV.EncMapUint16Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int8V(*v, e)
case map[uint16]int16:
- fastpathTV.EncMapUint16Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int16V(v, e)
case *map[uint16]int16:
- fastpathTV.EncMapUint16Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int16V(*v, e)
case map[uint16]int32:
- fastpathTV.EncMapUint16Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int32V(v, e)
case *map[uint16]int32:
- fastpathTV.EncMapUint16Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int32V(*v, e)
case map[uint16]int64:
- fastpathTV.EncMapUint16Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int64V(v, e)
case *map[uint16]int64:
- fastpathTV.EncMapUint16Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Int64V(*v, e)
case map[uint16]float32:
- fastpathTV.EncMapUint16Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Float32V(v, e)
case *map[uint16]float32:
- fastpathTV.EncMapUint16Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Float32V(*v, e)
case map[uint16]float64:
- fastpathTV.EncMapUint16Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Float64V(v, e)
case *map[uint16]float64:
- fastpathTV.EncMapUint16Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16Float64V(*v, e)
case map[uint16]bool:
- fastpathTV.EncMapUint16BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16BoolV(v, e)
case *map[uint16]bool:
- fastpathTV.EncMapUint16BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint16BoolV(*v, e)
case map[uint32]interface{}:
- fastpathTV.EncMapUint32IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32IntfV(v, e)
case *map[uint32]interface{}:
- fastpathTV.EncMapUint32IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32IntfV(*v, e)
case map[uint32]string:
- fastpathTV.EncMapUint32StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32StringV(v, e)
case *map[uint32]string:
- fastpathTV.EncMapUint32StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32StringV(*v, e)
case map[uint32]uint:
- fastpathTV.EncMapUint32UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32UintV(v, e)
case *map[uint32]uint:
- fastpathTV.EncMapUint32UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32UintV(*v, e)
case map[uint32]uint8:
- fastpathTV.EncMapUint32Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint8V(v, e)
case *map[uint32]uint8:
- fastpathTV.EncMapUint32Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint8V(*v, e)
case map[uint32]uint16:
- fastpathTV.EncMapUint32Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint16V(v, e)
case *map[uint32]uint16:
- fastpathTV.EncMapUint32Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint16V(*v, e)
case map[uint32]uint32:
- fastpathTV.EncMapUint32Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint32V(v, e)
case *map[uint32]uint32:
- fastpathTV.EncMapUint32Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint32V(*v, e)
case map[uint32]uint64:
- fastpathTV.EncMapUint32Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint64V(v, e)
case *map[uint32]uint64:
- fastpathTV.EncMapUint32Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Uint64V(*v, e)
case map[uint32]uintptr:
- fastpathTV.EncMapUint32UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32UintptrV(v, e)
case *map[uint32]uintptr:
- fastpathTV.EncMapUint32UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32UintptrV(*v, e)
case map[uint32]int:
- fastpathTV.EncMapUint32IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32IntV(v, e)
case *map[uint32]int:
- fastpathTV.EncMapUint32IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32IntV(*v, e)
case map[uint32]int8:
- fastpathTV.EncMapUint32Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int8V(v, e)
case *map[uint32]int8:
- fastpathTV.EncMapUint32Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int8V(*v, e)
case map[uint32]int16:
- fastpathTV.EncMapUint32Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int16V(v, e)
case *map[uint32]int16:
- fastpathTV.EncMapUint32Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int16V(*v, e)
case map[uint32]int32:
- fastpathTV.EncMapUint32Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int32V(v, e)
case *map[uint32]int32:
- fastpathTV.EncMapUint32Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int32V(*v, e)
case map[uint32]int64:
- fastpathTV.EncMapUint32Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int64V(v, e)
case *map[uint32]int64:
- fastpathTV.EncMapUint32Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Int64V(*v, e)
case map[uint32]float32:
- fastpathTV.EncMapUint32Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Float32V(v, e)
case *map[uint32]float32:
- fastpathTV.EncMapUint32Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Float32V(*v, e)
case map[uint32]float64:
- fastpathTV.EncMapUint32Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Float64V(v, e)
case *map[uint32]float64:
- fastpathTV.EncMapUint32Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32Float64V(*v, e)
case map[uint32]bool:
- fastpathTV.EncMapUint32BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32BoolV(v, e)
case *map[uint32]bool:
- fastpathTV.EncMapUint32BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint32BoolV(*v, e)
case map[uint64]interface{}:
- fastpathTV.EncMapUint64IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64IntfV(v, e)
case *map[uint64]interface{}:
- fastpathTV.EncMapUint64IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64IntfV(*v, e)
case map[uint64]string:
- fastpathTV.EncMapUint64StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64StringV(v, e)
case *map[uint64]string:
- fastpathTV.EncMapUint64StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64StringV(*v, e)
case map[uint64]uint:
- fastpathTV.EncMapUint64UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64UintV(v, e)
case *map[uint64]uint:
- fastpathTV.EncMapUint64UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64UintV(*v, e)
case map[uint64]uint8:
- fastpathTV.EncMapUint64Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint8V(v, e)
case *map[uint64]uint8:
- fastpathTV.EncMapUint64Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint8V(*v, e)
case map[uint64]uint16:
- fastpathTV.EncMapUint64Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint16V(v, e)
case *map[uint64]uint16:
- fastpathTV.EncMapUint64Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint16V(*v, e)
case map[uint64]uint32:
- fastpathTV.EncMapUint64Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint32V(v, e)
case *map[uint64]uint32:
- fastpathTV.EncMapUint64Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint32V(*v, e)
case map[uint64]uint64:
- fastpathTV.EncMapUint64Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint64V(v, e)
case *map[uint64]uint64:
- fastpathTV.EncMapUint64Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Uint64V(*v, e)
case map[uint64]uintptr:
- fastpathTV.EncMapUint64UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64UintptrV(v, e)
case *map[uint64]uintptr:
- fastpathTV.EncMapUint64UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64UintptrV(*v, e)
case map[uint64]int:
- fastpathTV.EncMapUint64IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64IntV(v, e)
case *map[uint64]int:
- fastpathTV.EncMapUint64IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64IntV(*v, e)
case map[uint64]int8:
- fastpathTV.EncMapUint64Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int8V(v, e)
case *map[uint64]int8:
- fastpathTV.EncMapUint64Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int8V(*v, e)
case map[uint64]int16:
- fastpathTV.EncMapUint64Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int16V(v, e)
case *map[uint64]int16:
- fastpathTV.EncMapUint64Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int16V(*v, e)
case map[uint64]int32:
- fastpathTV.EncMapUint64Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int32V(v, e)
case *map[uint64]int32:
- fastpathTV.EncMapUint64Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int32V(*v, e)
case map[uint64]int64:
- fastpathTV.EncMapUint64Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int64V(v, e)
case *map[uint64]int64:
- fastpathTV.EncMapUint64Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Int64V(*v, e)
case map[uint64]float32:
- fastpathTV.EncMapUint64Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Float32V(v, e)
case *map[uint64]float32:
- fastpathTV.EncMapUint64Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Float32V(*v, e)
case map[uint64]float64:
- fastpathTV.EncMapUint64Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Float64V(v, e)
case *map[uint64]float64:
- fastpathTV.EncMapUint64Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64Float64V(*v, e)
case map[uint64]bool:
- fastpathTV.EncMapUint64BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64BoolV(v, e)
case *map[uint64]bool:
- fastpathTV.EncMapUint64BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUint64BoolV(*v, e)
case map[uintptr]interface{}:
- fastpathTV.EncMapUintptrIntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrIntfV(v, e)
case *map[uintptr]interface{}:
- fastpathTV.EncMapUintptrIntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrIntfV(*v, e)
case map[uintptr]string:
- fastpathTV.EncMapUintptrStringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrStringV(v, e)
case *map[uintptr]string:
- fastpathTV.EncMapUintptrStringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrStringV(*v, e)
case map[uintptr]uint:
- fastpathTV.EncMapUintptrUintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUintV(v, e)
case *map[uintptr]uint:
- fastpathTV.EncMapUintptrUintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUintV(*v, e)
case map[uintptr]uint8:
- fastpathTV.EncMapUintptrUint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint8V(v, e)
case *map[uintptr]uint8:
- fastpathTV.EncMapUintptrUint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint8V(*v, e)
case map[uintptr]uint16:
- fastpathTV.EncMapUintptrUint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint16V(v, e)
case *map[uintptr]uint16:
- fastpathTV.EncMapUintptrUint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint16V(*v, e)
case map[uintptr]uint32:
- fastpathTV.EncMapUintptrUint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint32V(v, e)
case *map[uintptr]uint32:
- fastpathTV.EncMapUintptrUint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint32V(*v, e)
case map[uintptr]uint64:
- fastpathTV.EncMapUintptrUint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint64V(v, e)
case *map[uintptr]uint64:
- fastpathTV.EncMapUintptrUint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUint64V(*v, e)
case map[uintptr]uintptr:
- fastpathTV.EncMapUintptrUintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUintptrV(v, e)
case *map[uintptr]uintptr:
- fastpathTV.EncMapUintptrUintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrUintptrV(*v, e)
case map[uintptr]int:
- fastpathTV.EncMapUintptrIntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrIntV(v, e)
case *map[uintptr]int:
- fastpathTV.EncMapUintptrIntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrIntV(*v, e)
case map[uintptr]int8:
- fastpathTV.EncMapUintptrInt8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt8V(v, e)
case *map[uintptr]int8:
- fastpathTV.EncMapUintptrInt8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt8V(*v, e)
case map[uintptr]int16:
- fastpathTV.EncMapUintptrInt16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt16V(v, e)
case *map[uintptr]int16:
- fastpathTV.EncMapUintptrInt16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt16V(*v, e)
case map[uintptr]int32:
- fastpathTV.EncMapUintptrInt32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt32V(v, e)
case *map[uintptr]int32:
- fastpathTV.EncMapUintptrInt32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt32V(*v, e)
case map[uintptr]int64:
- fastpathTV.EncMapUintptrInt64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt64V(v, e)
case *map[uintptr]int64:
- fastpathTV.EncMapUintptrInt64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrInt64V(*v, e)
case map[uintptr]float32:
- fastpathTV.EncMapUintptrFloat32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrFloat32V(v, e)
case *map[uintptr]float32:
- fastpathTV.EncMapUintptrFloat32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrFloat32V(*v, e)
case map[uintptr]float64:
- fastpathTV.EncMapUintptrFloat64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrFloat64V(v, e)
case *map[uintptr]float64:
- fastpathTV.EncMapUintptrFloat64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrFloat64V(*v, e)
case map[uintptr]bool:
- fastpathTV.EncMapUintptrBoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrBoolV(v, e)
case *map[uintptr]bool:
- fastpathTV.EncMapUintptrBoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapUintptrBoolV(*v, e)
case map[int]interface{}:
- fastpathTV.EncMapIntIntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntIntfV(v, e)
case *map[int]interface{}:
- fastpathTV.EncMapIntIntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntIntfV(*v, e)
case map[int]string:
- fastpathTV.EncMapIntStringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntStringV(v, e)
case *map[int]string:
- fastpathTV.EncMapIntStringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntStringV(*v, e)
case map[int]uint:
- fastpathTV.EncMapIntUintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUintV(v, e)
case *map[int]uint:
- fastpathTV.EncMapIntUintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUintV(*v, e)
case map[int]uint8:
- fastpathTV.EncMapIntUint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint8V(v, e)
case *map[int]uint8:
- fastpathTV.EncMapIntUint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint8V(*v, e)
case map[int]uint16:
- fastpathTV.EncMapIntUint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint16V(v, e)
case *map[int]uint16:
- fastpathTV.EncMapIntUint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint16V(*v, e)
case map[int]uint32:
- fastpathTV.EncMapIntUint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint32V(v, e)
case *map[int]uint32:
- fastpathTV.EncMapIntUint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint32V(*v, e)
case map[int]uint64:
- fastpathTV.EncMapIntUint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint64V(v, e)
case *map[int]uint64:
- fastpathTV.EncMapIntUint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUint64V(*v, e)
case map[int]uintptr:
- fastpathTV.EncMapIntUintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUintptrV(v, e)
case *map[int]uintptr:
- fastpathTV.EncMapIntUintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntUintptrV(*v, e)
case map[int]int:
- fastpathTV.EncMapIntIntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntIntV(v, e)
case *map[int]int:
- fastpathTV.EncMapIntIntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntIntV(*v, e)
case map[int]int8:
- fastpathTV.EncMapIntInt8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt8V(v, e)
case *map[int]int8:
- fastpathTV.EncMapIntInt8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt8V(*v, e)
case map[int]int16:
- fastpathTV.EncMapIntInt16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt16V(v, e)
case *map[int]int16:
- fastpathTV.EncMapIntInt16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt16V(*v, e)
case map[int]int32:
- fastpathTV.EncMapIntInt32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt32V(v, e)
case *map[int]int32:
- fastpathTV.EncMapIntInt32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt32V(*v, e)
case map[int]int64:
- fastpathTV.EncMapIntInt64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt64V(v, e)
case *map[int]int64:
- fastpathTV.EncMapIntInt64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntInt64V(*v, e)
case map[int]float32:
- fastpathTV.EncMapIntFloat32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntFloat32V(v, e)
case *map[int]float32:
- fastpathTV.EncMapIntFloat32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntFloat32V(*v, e)
case map[int]float64:
- fastpathTV.EncMapIntFloat64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntFloat64V(v, e)
case *map[int]float64:
- fastpathTV.EncMapIntFloat64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntFloat64V(*v, e)
case map[int]bool:
- fastpathTV.EncMapIntBoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntBoolV(v, e)
case *map[int]bool:
- fastpathTV.EncMapIntBoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapIntBoolV(*v, e)
case map[int8]interface{}:
- fastpathTV.EncMapInt8IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8IntfV(v, e)
case *map[int8]interface{}:
- fastpathTV.EncMapInt8IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8IntfV(*v, e)
case map[int8]string:
- fastpathTV.EncMapInt8StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8StringV(v, e)
case *map[int8]string:
- fastpathTV.EncMapInt8StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8StringV(*v, e)
case map[int8]uint:
- fastpathTV.EncMapInt8UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8UintV(v, e)
case *map[int8]uint:
- fastpathTV.EncMapInt8UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8UintV(*v, e)
case map[int8]uint8:
- fastpathTV.EncMapInt8Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint8V(v, e)
case *map[int8]uint8:
- fastpathTV.EncMapInt8Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint8V(*v, e)
case map[int8]uint16:
- fastpathTV.EncMapInt8Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint16V(v, e)
case *map[int8]uint16:
- fastpathTV.EncMapInt8Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint16V(*v, e)
case map[int8]uint32:
- fastpathTV.EncMapInt8Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint32V(v, e)
case *map[int8]uint32:
- fastpathTV.EncMapInt8Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint32V(*v, e)
case map[int8]uint64:
- fastpathTV.EncMapInt8Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint64V(v, e)
case *map[int8]uint64:
- fastpathTV.EncMapInt8Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Uint64V(*v, e)
case map[int8]uintptr:
- fastpathTV.EncMapInt8UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8UintptrV(v, e)
case *map[int8]uintptr:
- fastpathTV.EncMapInt8UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8UintptrV(*v, e)
case map[int8]int:
- fastpathTV.EncMapInt8IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8IntV(v, e)
case *map[int8]int:
- fastpathTV.EncMapInt8IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8IntV(*v, e)
case map[int8]int8:
- fastpathTV.EncMapInt8Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int8V(v, e)
case *map[int8]int8:
- fastpathTV.EncMapInt8Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int8V(*v, e)
case map[int8]int16:
- fastpathTV.EncMapInt8Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int16V(v, e)
case *map[int8]int16:
- fastpathTV.EncMapInt8Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int16V(*v, e)
case map[int8]int32:
- fastpathTV.EncMapInt8Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int32V(v, e)
case *map[int8]int32:
- fastpathTV.EncMapInt8Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int32V(*v, e)
case map[int8]int64:
- fastpathTV.EncMapInt8Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int64V(v, e)
case *map[int8]int64:
- fastpathTV.EncMapInt8Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Int64V(*v, e)
case map[int8]float32:
- fastpathTV.EncMapInt8Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Float32V(v, e)
case *map[int8]float32:
- fastpathTV.EncMapInt8Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Float32V(*v, e)
case map[int8]float64:
- fastpathTV.EncMapInt8Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Float64V(v, e)
case *map[int8]float64:
- fastpathTV.EncMapInt8Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8Float64V(*v, e)
case map[int8]bool:
- fastpathTV.EncMapInt8BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8BoolV(v, e)
case *map[int8]bool:
- fastpathTV.EncMapInt8BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt8BoolV(*v, e)
case map[int16]interface{}:
- fastpathTV.EncMapInt16IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16IntfV(v, e)
case *map[int16]interface{}:
- fastpathTV.EncMapInt16IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16IntfV(*v, e)
case map[int16]string:
- fastpathTV.EncMapInt16StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16StringV(v, e)
case *map[int16]string:
- fastpathTV.EncMapInt16StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16StringV(*v, e)
case map[int16]uint:
- fastpathTV.EncMapInt16UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16UintV(v, e)
case *map[int16]uint:
- fastpathTV.EncMapInt16UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16UintV(*v, e)
case map[int16]uint8:
- fastpathTV.EncMapInt16Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint8V(v, e)
case *map[int16]uint8:
- fastpathTV.EncMapInt16Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint8V(*v, e)
case map[int16]uint16:
- fastpathTV.EncMapInt16Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint16V(v, e)
case *map[int16]uint16:
- fastpathTV.EncMapInt16Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint16V(*v, e)
case map[int16]uint32:
- fastpathTV.EncMapInt16Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint32V(v, e)
case *map[int16]uint32:
- fastpathTV.EncMapInt16Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint32V(*v, e)
case map[int16]uint64:
- fastpathTV.EncMapInt16Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint64V(v, e)
case *map[int16]uint64:
- fastpathTV.EncMapInt16Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Uint64V(*v, e)
case map[int16]uintptr:
- fastpathTV.EncMapInt16UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16UintptrV(v, e)
case *map[int16]uintptr:
- fastpathTV.EncMapInt16UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16UintptrV(*v, e)
case map[int16]int:
- fastpathTV.EncMapInt16IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16IntV(v, e)
case *map[int16]int:
- fastpathTV.EncMapInt16IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16IntV(*v, e)
case map[int16]int8:
- fastpathTV.EncMapInt16Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int8V(v, e)
case *map[int16]int8:
- fastpathTV.EncMapInt16Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int8V(*v, e)
case map[int16]int16:
- fastpathTV.EncMapInt16Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int16V(v, e)
case *map[int16]int16:
- fastpathTV.EncMapInt16Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int16V(*v, e)
case map[int16]int32:
- fastpathTV.EncMapInt16Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int32V(v, e)
case *map[int16]int32:
- fastpathTV.EncMapInt16Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int32V(*v, e)
case map[int16]int64:
- fastpathTV.EncMapInt16Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int64V(v, e)
case *map[int16]int64:
- fastpathTV.EncMapInt16Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Int64V(*v, e)
case map[int16]float32:
- fastpathTV.EncMapInt16Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Float32V(v, e)
case *map[int16]float32:
- fastpathTV.EncMapInt16Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Float32V(*v, e)
case map[int16]float64:
- fastpathTV.EncMapInt16Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Float64V(v, e)
case *map[int16]float64:
- fastpathTV.EncMapInt16Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16Float64V(*v, e)
case map[int16]bool:
- fastpathTV.EncMapInt16BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16BoolV(v, e)
case *map[int16]bool:
- fastpathTV.EncMapInt16BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt16BoolV(*v, e)
case map[int32]interface{}:
- fastpathTV.EncMapInt32IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32IntfV(v, e)
case *map[int32]interface{}:
- fastpathTV.EncMapInt32IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32IntfV(*v, e)
case map[int32]string:
- fastpathTV.EncMapInt32StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32StringV(v, e)
case *map[int32]string:
- fastpathTV.EncMapInt32StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32StringV(*v, e)
case map[int32]uint:
- fastpathTV.EncMapInt32UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32UintV(v, e)
case *map[int32]uint:
- fastpathTV.EncMapInt32UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32UintV(*v, e)
case map[int32]uint8:
- fastpathTV.EncMapInt32Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint8V(v, e)
case *map[int32]uint8:
- fastpathTV.EncMapInt32Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint8V(*v, e)
case map[int32]uint16:
- fastpathTV.EncMapInt32Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint16V(v, e)
case *map[int32]uint16:
- fastpathTV.EncMapInt32Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint16V(*v, e)
case map[int32]uint32:
- fastpathTV.EncMapInt32Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint32V(v, e)
case *map[int32]uint32:
- fastpathTV.EncMapInt32Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint32V(*v, e)
case map[int32]uint64:
- fastpathTV.EncMapInt32Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint64V(v, e)
case *map[int32]uint64:
- fastpathTV.EncMapInt32Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Uint64V(*v, e)
case map[int32]uintptr:
- fastpathTV.EncMapInt32UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32UintptrV(v, e)
case *map[int32]uintptr:
- fastpathTV.EncMapInt32UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32UintptrV(*v, e)
case map[int32]int:
- fastpathTV.EncMapInt32IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32IntV(v, e)
case *map[int32]int:
- fastpathTV.EncMapInt32IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32IntV(*v, e)
case map[int32]int8:
- fastpathTV.EncMapInt32Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int8V(v, e)
case *map[int32]int8:
- fastpathTV.EncMapInt32Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int8V(*v, e)
case map[int32]int16:
- fastpathTV.EncMapInt32Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int16V(v, e)
case *map[int32]int16:
- fastpathTV.EncMapInt32Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int16V(*v, e)
case map[int32]int32:
- fastpathTV.EncMapInt32Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int32V(v, e)
case *map[int32]int32:
- fastpathTV.EncMapInt32Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int32V(*v, e)
case map[int32]int64:
- fastpathTV.EncMapInt32Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int64V(v, e)
case *map[int32]int64:
- fastpathTV.EncMapInt32Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Int64V(*v, e)
case map[int32]float32:
- fastpathTV.EncMapInt32Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Float32V(v, e)
case *map[int32]float32:
- fastpathTV.EncMapInt32Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Float32V(*v, e)
case map[int32]float64:
- fastpathTV.EncMapInt32Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Float64V(v, e)
case *map[int32]float64:
- fastpathTV.EncMapInt32Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32Float64V(*v, e)
case map[int32]bool:
- fastpathTV.EncMapInt32BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32BoolV(v, e)
case *map[int32]bool:
- fastpathTV.EncMapInt32BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt32BoolV(*v, e)
case map[int64]interface{}:
- fastpathTV.EncMapInt64IntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64IntfV(v, e)
case *map[int64]interface{}:
- fastpathTV.EncMapInt64IntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64IntfV(*v, e)
case map[int64]string:
- fastpathTV.EncMapInt64StringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64StringV(v, e)
case *map[int64]string:
- fastpathTV.EncMapInt64StringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64StringV(*v, e)
case map[int64]uint:
- fastpathTV.EncMapInt64UintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64UintV(v, e)
case *map[int64]uint:
- fastpathTV.EncMapInt64UintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64UintV(*v, e)
case map[int64]uint8:
- fastpathTV.EncMapInt64Uint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint8V(v, e)
case *map[int64]uint8:
- fastpathTV.EncMapInt64Uint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint8V(*v, e)
case map[int64]uint16:
- fastpathTV.EncMapInt64Uint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint16V(v, e)
case *map[int64]uint16:
- fastpathTV.EncMapInt64Uint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint16V(*v, e)
case map[int64]uint32:
- fastpathTV.EncMapInt64Uint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint32V(v, e)
case *map[int64]uint32:
- fastpathTV.EncMapInt64Uint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint32V(*v, e)
case map[int64]uint64:
- fastpathTV.EncMapInt64Uint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint64V(v, e)
case *map[int64]uint64:
- fastpathTV.EncMapInt64Uint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Uint64V(*v, e)
case map[int64]uintptr:
- fastpathTV.EncMapInt64UintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64UintptrV(v, e)
case *map[int64]uintptr:
- fastpathTV.EncMapInt64UintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64UintptrV(*v, e)
case map[int64]int:
- fastpathTV.EncMapInt64IntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64IntV(v, e)
case *map[int64]int:
- fastpathTV.EncMapInt64IntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64IntV(*v, e)
case map[int64]int8:
- fastpathTV.EncMapInt64Int8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int8V(v, e)
case *map[int64]int8:
- fastpathTV.EncMapInt64Int8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int8V(*v, e)
case map[int64]int16:
- fastpathTV.EncMapInt64Int16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int16V(v, e)
case *map[int64]int16:
- fastpathTV.EncMapInt64Int16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int16V(*v, e)
case map[int64]int32:
- fastpathTV.EncMapInt64Int32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int32V(v, e)
case *map[int64]int32:
- fastpathTV.EncMapInt64Int32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int32V(*v, e)
case map[int64]int64:
- fastpathTV.EncMapInt64Int64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int64V(v, e)
case *map[int64]int64:
- fastpathTV.EncMapInt64Int64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Int64V(*v, e)
case map[int64]float32:
- fastpathTV.EncMapInt64Float32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Float32V(v, e)
case *map[int64]float32:
- fastpathTV.EncMapInt64Float32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Float32V(*v, e)
case map[int64]float64:
- fastpathTV.EncMapInt64Float64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Float64V(v, e)
case *map[int64]float64:
- fastpathTV.EncMapInt64Float64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64Float64V(*v, e)
case map[int64]bool:
- fastpathTV.EncMapInt64BoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64BoolV(v, e)
case *map[int64]bool:
- fastpathTV.EncMapInt64BoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapInt64BoolV(*v, e)
case map[bool]interface{}:
- fastpathTV.EncMapBoolIntfV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolIntfV(v, e)
case *map[bool]interface{}:
- fastpathTV.EncMapBoolIntfV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolIntfV(*v, e)
case map[bool]string:
- fastpathTV.EncMapBoolStringV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolStringV(v, e)
case *map[bool]string:
- fastpathTV.EncMapBoolStringV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolStringV(*v, e)
case map[bool]uint:
- fastpathTV.EncMapBoolUintV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUintV(v, e)
case *map[bool]uint:
- fastpathTV.EncMapBoolUintV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUintV(*v, e)
case map[bool]uint8:
- fastpathTV.EncMapBoolUint8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint8V(v, e)
case *map[bool]uint8:
- fastpathTV.EncMapBoolUint8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint8V(*v, e)
case map[bool]uint16:
- fastpathTV.EncMapBoolUint16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint16V(v, e)
case *map[bool]uint16:
- fastpathTV.EncMapBoolUint16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint16V(*v, e)
case map[bool]uint32:
- fastpathTV.EncMapBoolUint32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint32V(v, e)
case *map[bool]uint32:
- fastpathTV.EncMapBoolUint32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint32V(*v, e)
case map[bool]uint64:
- fastpathTV.EncMapBoolUint64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint64V(v, e)
case *map[bool]uint64:
- fastpathTV.EncMapBoolUint64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUint64V(*v, e)
case map[bool]uintptr:
- fastpathTV.EncMapBoolUintptrV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUintptrV(v, e)
case *map[bool]uintptr:
- fastpathTV.EncMapBoolUintptrV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolUintptrV(*v, e)
case map[bool]int:
- fastpathTV.EncMapBoolIntV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolIntV(v, e)
case *map[bool]int:
- fastpathTV.EncMapBoolIntV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolIntV(*v, e)
case map[bool]int8:
- fastpathTV.EncMapBoolInt8V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt8V(v, e)
case *map[bool]int8:
- fastpathTV.EncMapBoolInt8V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt8V(*v, e)
case map[bool]int16:
- fastpathTV.EncMapBoolInt16V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt16V(v, e)
case *map[bool]int16:
- fastpathTV.EncMapBoolInt16V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt16V(*v, e)
case map[bool]int32:
- fastpathTV.EncMapBoolInt32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt32V(v, e)
case *map[bool]int32:
- fastpathTV.EncMapBoolInt32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt32V(*v, e)
case map[bool]int64:
- fastpathTV.EncMapBoolInt64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt64V(v, e)
case *map[bool]int64:
- fastpathTV.EncMapBoolInt64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolInt64V(*v, e)
case map[bool]float32:
- fastpathTV.EncMapBoolFloat32V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolFloat32V(v, e)
case *map[bool]float32:
- fastpathTV.EncMapBoolFloat32V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolFloat32V(*v, e)
case map[bool]float64:
- fastpathTV.EncMapBoolFloat64V(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolFloat64V(v, e)
case *map[bool]float64:
- fastpathTV.EncMapBoolFloat64V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolFloat64V(*v, e)
case map[bool]bool:
- fastpathTV.EncMapBoolBoolV(v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolBoolV(v, e)
case *map[bool]bool:
- fastpathTV.EncMapBoolBoolV(*v, fastpathCheckNilTrue, e)
+ fastpathTV.EncMapBoolBoolV(*v, e)
default:
_ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release)
@@ -3123,347 +3116,597 @@ func fastpathEncodeTypeSwitchMap(iv interface{}, e *Encoder) bool {
// -- -- fast path functions
-func (f *encFnInfo) fastpathEncSliceIntfR(rv reflect.Value) {
- fastpathTV.EncSliceIntfV(rv.Interface().([]interface{}), fastpathCheckNilFalse, f.e)
-}
-func (_ fastpathT) EncSliceIntfV(v []interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
+func (e *Encoder) fastpathEncSliceIntfR(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.EncAsMapSliceIntfV(rv2i(rv).([]interface{}), e)
+ } else {
+ fastpathTV.EncSliceIntfV(rv2i(rv).([]interface{}), e)
}
- ee.EncodeArrayStart(len(v))
+}
+func (_ fastpathT) EncSliceIntfV(v []interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
for _, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ if esep {
+ ee.WriteArrayElem()
}
e.encode(v2)
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ ee.WriteArrayEnd()
}
-func (f *encFnInfo) fastpathEncSliceStringR(rv reflect.Value) {
- fastpathTV.EncSliceStringV(rv.Interface().([]string), fastpathCheckNilFalse, f.e)
-}
-func (_ fastpathT) EncSliceStringV(v []string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
+func (_ fastpathT) EncAsMapSliceIntfV(v []interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
return
}
- ee.EncodeArrayStart(len(v))
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
+ }
+ e.encode(v2)
+ }
+ ee.WriteMapEnd()
+}
+
+func (e *Encoder) fastpathEncSliceStringR(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.EncAsMapSliceStringV(rv2i(rv).([]string), e)
+ } else {
+ fastpathTV.EncSliceStringV(rv2i(rv).([]string), e)
+ }
+}
+func (_ fastpathT) EncSliceStringV(v []string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
for _, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ if esep {
+ ee.WriteArrayElem()
}
ee.EncodeString(c_UTF8, v2)
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ ee.WriteArrayEnd()
}
-func (f *encFnInfo) fastpathEncSliceFloat32R(rv reflect.Value) {
- fastpathTV.EncSliceFloat32V(rv.Interface().([]float32), fastpathCheckNilFalse, f.e)
-}
-func (_ fastpathT) EncSliceFloat32V(v []float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
+func (_ fastpathT) EncAsMapSliceStringV(v []string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
return
}
- ee.EncodeArrayStart(len(v))
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
+ }
+ ee.EncodeString(c_UTF8, v2)
+ }
+ ee.WriteMapEnd()
+}
+
+func (e *Encoder) fastpathEncSliceFloat32R(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.EncAsMapSliceFloat32V(rv2i(rv).([]float32), e)
+ } else {
+ fastpathTV.EncSliceFloat32V(rv2i(rv).([]float32), e)
+ }
+}
+func (_ fastpathT) EncSliceFloat32V(v []float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
for _, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ if esep {
+ ee.WriteArrayElem()
}
ee.EncodeFloat32(v2)
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ ee.WriteArrayEnd()
}
-func (f *encFnInfo) fastpathEncSliceFloat64R(rv reflect.Value) {
- fastpathTV.EncSliceFloat64V(rv.Interface().([]float64), fastpathCheckNilFalse, f.e)
-}
-func (_ fastpathT) EncSliceFloat64V(v []float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
+func (_ fastpathT) EncAsMapSliceFloat32V(v []float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
return
}
- ee.EncodeArrayStart(len(v))
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
+ }
+ ee.EncodeFloat32(v2)
+ }
+ ee.WriteMapEnd()
+}
+
+func (e *Encoder) fastpathEncSliceFloat64R(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.EncAsMapSliceFloat64V(rv2i(rv).([]float64), e)
+ } else {
+ fastpathTV.EncSliceFloat64V(rv2i(rv).([]float64), e)
+ }
+}
+func (_ fastpathT) EncSliceFloat64V(v []float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
for _, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ if esep {
+ ee.WriteArrayElem()
}
ee.EncodeFloat64(v2)
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ ee.WriteArrayEnd()
}
-func (f *encFnInfo) fastpathEncSliceUintR(rv reflect.Value) {
- fastpathTV.EncSliceUintV(rv.Interface().([]uint), fastpathCheckNilFalse, f.e)
-}
-func (_ fastpathT) EncSliceUintV(v []uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
+func (_ fastpathT) EncAsMapSliceFloat64V(v []float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
return
}
- ee.EncodeArrayStart(len(v))
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
+ }
+ ee.EncodeFloat64(v2)
+ }
+ ee.WriteMapEnd()
+}
+
+func (e *Encoder) fastpathEncSliceUintR(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.EncAsMapSliceUintV(rv2i(rv).([]uint), e)
+ } else {
+ fastpathTV.EncSliceUintV(rv2i(rv).([]uint), e)
+ }
+}
+func (_ fastpathT) EncSliceUintV(v []uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
for _, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ if esep {
+ ee.WriteArrayElem()
}
ee.EncodeUint(uint64(v2))
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ ee.WriteArrayEnd()
}
-func (f *encFnInfo) fastpathEncSliceUint16R(rv reflect.Value) {
- fastpathTV.EncSliceUint16V(rv.Interface().([]uint16), fastpathCheckNilFalse, f.e)
-}
-func (_ fastpathT) EncSliceUint16V(v []uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
+func (_ fastpathT) EncAsMapSliceUintV(v []uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
return
}
- ee.EncodeArrayStart(len(v))
- for _, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
}
ee.EncodeUint(uint64(v2))
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncSliceUint32R(rv reflect.Value) {
- fastpathTV.EncSliceUint32V(rv.Interface().([]uint32), fastpathCheckNilFalse, f.e)
-}
-func (_ fastpathT) EncSliceUint32V(v []uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
+func (e *Encoder) fastpathEncSliceUint16R(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.EncAsMapSliceUint16V(rv2i(rv).([]uint16), e)
+ } else {
+ fastpathTV.EncSliceUint16V(rv2i(rv).([]uint16), e)
}
- ee.EncodeArrayStart(len(v))
+}
+func (_ fastpathT) EncSliceUint16V(v []uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
for _, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ if esep {
+ ee.WriteArrayElem()
}
ee.EncodeUint(uint64(v2))
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ ee.WriteArrayEnd()
}
-func (f *encFnInfo) fastpathEncSliceUint64R(rv reflect.Value) {
- fastpathTV.EncSliceUint64V(rv.Interface().([]uint64), fastpathCheckNilFalse, f.e)
-}
-func (_ fastpathT) EncSliceUint64V(v []uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
+func (_ fastpathT) EncAsMapSliceUint16V(v []uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
return
}
- ee.EncodeArrayStart(len(v))
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
+ }
+ ee.EncodeUint(uint64(v2))
+ }
+ ee.WriteMapEnd()
+}
+
+func (e *Encoder) fastpathEncSliceUint32R(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.EncAsMapSliceUint32V(rv2i(rv).([]uint32), e)
+ } else {
+ fastpathTV.EncSliceUint32V(rv2i(rv).([]uint32), e)
+ }
+}
+func (_ fastpathT) EncSliceUint32V(v []uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
for _, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ if esep {
+ ee.WriteArrayElem()
}
ee.EncodeUint(uint64(v2))
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
+ ee.WriteArrayEnd()
+}
+
+func (_ fastpathT) EncAsMapSliceUint32V(v []uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
+ return
}
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
+ }
+ ee.EncodeUint(uint64(v2))
+ }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncSliceUintptrR(rv reflect.Value) {
- fastpathTV.EncSliceUintptrV(rv.Interface().([]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncSliceUint64R(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.EncAsMapSliceUint64V(rv2i(rv).([]uint64), e)
+ } else {
+ fastpathTV.EncSliceUint64V(rv2i(rv).([]uint64), e)
+ }
}
-func (_ fastpathT) EncSliceUintptrV(v []uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
+func (_ fastpathT) EncSliceUint64V(v []uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
+ for _, v2 := range v {
+ if esep {
+ ee.WriteArrayElem()
+ }
+ ee.EncodeUint(uint64(v2))
+ }
+ ee.WriteArrayEnd()
+}
+
+func (_ fastpathT) EncAsMapSliceUint64V(v []uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
return
}
- ee.EncodeArrayStart(len(v))
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
+ }
+ ee.EncodeUint(uint64(v2))
+ }
+ ee.WriteMapEnd()
+}
+
+func (e *Encoder) fastpathEncSliceUintptrR(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.EncAsMapSliceUintptrV(rv2i(rv).([]uintptr), e)
+ } else {
+ fastpathTV.EncSliceUintptrV(rv2i(rv).([]uintptr), e)
+ }
+}
+func (_ fastpathT) EncSliceUintptrV(v []uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
for _, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ if esep {
+ ee.WriteArrayElem()
}
e.encode(v2)
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ ee.WriteArrayEnd()
}
-func (f *encFnInfo) fastpathEncSliceIntR(rv reflect.Value) {
- fastpathTV.EncSliceIntV(rv.Interface().([]int), fastpathCheckNilFalse, f.e)
-}
-func (_ fastpathT) EncSliceIntV(v []int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
+func (_ fastpathT) EncAsMapSliceUintptrV(v []uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
return
}
- ee.EncodeArrayStart(len(v))
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
+ }
+ e.encode(v2)
+ }
+ ee.WriteMapEnd()
+}
+
+func (e *Encoder) fastpathEncSliceIntR(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.EncAsMapSliceIntV(rv2i(rv).([]int), e)
+ } else {
+ fastpathTV.EncSliceIntV(rv2i(rv).([]int), e)
+ }
+}
+func (_ fastpathT) EncSliceIntV(v []int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
for _, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ if esep {
+ ee.WriteArrayElem()
}
ee.EncodeInt(int64(v2))
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ ee.WriteArrayEnd()
}
-func (f *encFnInfo) fastpathEncSliceInt8R(rv reflect.Value) {
- fastpathTV.EncSliceInt8V(rv.Interface().([]int8), fastpathCheckNilFalse, f.e)
-}
-func (_ fastpathT) EncSliceInt8V(v []int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
+func (_ fastpathT) EncAsMapSliceIntV(v []int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
return
}
- ee.EncodeArrayStart(len(v))
- for _, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
}
ee.EncodeInt(int64(v2))
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncSliceInt16R(rv reflect.Value) {
- fastpathTV.EncSliceInt16V(rv.Interface().([]int16), fastpathCheckNilFalse, f.e)
-}
-func (_ fastpathT) EncSliceInt16V(v []int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
+func (e *Encoder) fastpathEncSliceInt8R(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.EncAsMapSliceInt8V(rv2i(rv).([]int8), e)
+ } else {
+ fastpathTV.EncSliceInt8V(rv2i(rv).([]int8), e)
}
- ee.EncodeArrayStart(len(v))
+}
+func (_ fastpathT) EncSliceInt8V(v []int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
for _, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ if esep {
+ ee.WriteArrayElem()
}
ee.EncodeInt(int64(v2))
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ ee.WriteArrayEnd()
}
-func (f *encFnInfo) fastpathEncSliceInt32R(rv reflect.Value) {
- fastpathTV.EncSliceInt32V(rv.Interface().([]int32), fastpathCheckNilFalse, f.e)
-}
-func (_ fastpathT) EncSliceInt32V(v []int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
+func (_ fastpathT) EncAsMapSliceInt8V(v []int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
return
}
- ee.EncodeArrayStart(len(v))
- for _, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
}
ee.EncodeInt(int64(v2))
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncSliceInt64R(rv reflect.Value) {
- fastpathTV.EncSliceInt64V(rv.Interface().([]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncSliceInt16R(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.EncAsMapSliceInt16V(rv2i(rv).([]int16), e)
+ } else {
+ fastpathTV.EncSliceInt16V(rv2i(rv).([]int16), e)
+ }
+}
+func (_ fastpathT) EncSliceInt16V(v []int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
+ for _, v2 := range v {
+ if esep {
+ ee.WriteArrayElem()
+ }
+ ee.EncodeInt(int64(v2))
+ }
+ ee.WriteArrayEnd()
}
-func (_ fastpathT) EncSliceInt64V(v []int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
+
+func (_ fastpathT) EncAsMapSliceInt16V(v []int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
return
}
- ee.EncodeArrayStart(len(v))
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
+ }
+ ee.EncodeInt(int64(v2))
+ }
+ ee.WriteMapEnd()
+}
+
+func (e *Encoder) fastpathEncSliceInt32R(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.EncAsMapSliceInt32V(rv2i(rv).([]int32), e)
+ } else {
+ fastpathTV.EncSliceInt32V(rv2i(rv).([]int32), e)
+ }
+}
+func (_ fastpathT) EncSliceInt32V(v []int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
for _, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ if esep {
+ ee.WriteArrayElem()
}
ee.EncodeInt(int64(v2))
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
+ ee.WriteArrayEnd()
+}
+
+func (_ fastpathT) EncAsMapSliceInt32V(v []int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
+ return
+ }
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
+ }
+ ee.EncodeInt(int64(v2))
}
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncSliceBoolR(rv reflect.Value) {
- fastpathTV.EncSliceBoolV(rv.Interface().([]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncSliceInt64R(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.EncAsMapSliceInt64V(rv2i(rv).([]int64), e)
+ } else {
+ fastpathTV.EncSliceInt64V(rv2i(rv).([]int64), e)
+ }
+}
+func (_ fastpathT) EncSliceInt64V(v []int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
+ for _, v2 := range v {
+ if esep {
+ ee.WriteArrayElem()
+ }
+ ee.EncodeInt(int64(v2))
+ }
+ ee.WriteArrayEnd()
}
-func (_ fastpathT) EncSliceBoolV(v []bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
+
+func (_ fastpathT) EncAsMapSliceInt64V(v []int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
return
}
- ee.EncodeArrayStart(len(v))
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
+ }
+ ee.EncodeInt(int64(v2))
+ }
+ ee.WriteMapEnd()
+}
+
+func (e *Encoder) fastpathEncSliceBoolR(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.EncAsMapSliceBoolV(rv2i(rv).([]bool), e)
+ } else {
+ fastpathTV.EncSliceBoolV(rv2i(rv).([]bool), e)
+ }
+}
+func (_ fastpathT) EncSliceBoolV(v []bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
for _, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerArrayElem)
+ if esep {
+ ee.WriteArrayElem()
}
ee.EncodeBool(v2)
}
- if cr != nil {
- cr.sendContainerState(containerArrayEnd)
- }
+ ee.WriteArrayEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfIntfR(rv reflect.Value) {
- fastpathTV.EncMapIntfIntfV(rv.Interface().(map[interface{}]interface{}), fastpathCheckNilFalse, f.e)
-}
-func (_ fastpathT) EncMapIntfIntfV(v map[interface{}]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
+func (_ fastpathT) EncAsMapSliceBoolV(v []bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
return
}
- ee.EncodeMapStart(len(v))
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
+ }
+ ee.EncodeBool(v2)
+ }
+ ee.WriteMapEnd()
+}
+
+func (e *Encoder) fastpathEncMapIntfIntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfIntfV(rv2i(rv).(map[interface{}]interface{}), e)
+}
+func (_ fastpathT) EncMapIntfIntfV(v map[interface{}]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -3480,43 +3723,36 @@ func (_ fastpathT) EncMapIntfIntfV(v map[interface{}]interface{}, checkNil bool,
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfStringR(rv reflect.Value) {
- fastpathTV.EncMapIntfStringV(rv.Interface().(map[interface{}]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntfStringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfStringV(rv2i(rv).(map[interface{}]string), e)
}
-func (_ fastpathT) EncMapIntfStringV(v map[interface{}]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntfStringV(v map[interface{}]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -3533,43 +3769,36 @@ func (_ fastpathT) EncMapIntfStringV(v map[interface{}]string, checkNil bool, e
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfUintR(rv reflect.Value) {
- fastpathTV.EncMapIntfUintV(rv.Interface().(map[interface{}]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntfUintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfUintV(rv2i(rv).(map[interface{}]uint), e)
}
-func (_ fastpathT) EncMapIntfUintV(v map[interface{}]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntfUintV(v map[interface{}]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -3586,43 +3815,36 @@ func (_ fastpathT) EncMapIntfUintV(v map[interface{}]uint, checkNil bool, e *Enc
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfUint8R(rv reflect.Value) {
- fastpathTV.EncMapIntfUint8V(rv.Interface().(map[interface{}]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntfUint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfUint8V(rv2i(rv).(map[interface{}]uint8), e)
}
-func (_ fastpathT) EncMapIntfUint8V(v map[interface{}]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntfUint8V(v map[interface{}]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -3639,43 +3861,36 @@ func (_ fastpathT) EncMapIntfUint8V(v map[interface{}]uint8, checkNil bool, e *E
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfUint16R(rv reflect.Value) {
- fastpathTV.EncMapIntfUint16V(rv.Interface().(map[interface{}]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntfUint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfUint16V(rv2i(rv).(map[interface{}]uint16), e)
}
-func (_ fastpathT) EncMapIntfUint16V(v map[interface{}]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntfUint16V(v map[interface{}]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -3692,43 +3907,36 @@ func (_ fastpathT) EncMapIntfUint16V(v map[interface{}]uint16, checkNil bool, e
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfUint32R(rv reflect.Value) {
- fastpathTV.EncMapIntfUint32V(rv.Interface().(map[interface{}]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntfUint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfUint32V(rv2i(rv).(map[interface{}]uint32), e)
}
-func (_ fastpathT) EncMapIntfUint32V(v map[interface{}]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntfUint32V(v map[interface{}]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -3745,43 +3953,36 @@ func (_ fastpathT) EncMapIntfUint32V(v map[interface{}]uint32, checkNil bool, e
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfUint64R(rv reflect.Value) {
- fastpathTV.EncMapIntfUint64V(rv.Interface().(map[interface{}]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntfUint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfUint64V(rv2i(rv).(map[interface{}]uint64), e)
}
-func (_ fastpathT) EncMapIntfUint64V(v map[interface{}]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntfUint64V(v map[interface{}]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -3798,43 +3999,36 @@ func (_ fastpathT) EncMapIntfUint64V(v map[interface{}]uint64, checkNil bool, e
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfUintptrR(rv reflect.Value) {
- fastpathTV.EncMapIntfUintptrV(rv.Interface().(map[interface{}]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntfUintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfUintptrV(rv2i(rv).(map[interface{}]uintptr), e)
}
-func (_ fastpathT) EncMapIntfUintptrV(v map[interface{}]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntfUintptrV(v map[interface{}]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -3851,43 +4045,36 @@ func (_ fastpathT) EncMapIntfUintptrV(v map[interface{}]uintptr, checkNil bool,
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfIntR(rv reflect.Value) {
- fastpathTV.EncMapIntfIntV(rv.Interface().(map[interface{}]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntfIntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfIntV(rv2i(rv).(map[interface{}]int), e)
}
-func (_ fastpathT) EncMapIntfIntV(v map[interface{}]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntfIntV(v map[interface{}]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -3904,43 +4091,36 @@ func (_ fastpathT) EncMapIntfIntV(v map[interface{}]int, checkNil bool, e *Encod
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfInt8R(rv reflect.Value) {
- fastpathTV.EncMapIntfInt8V(rv.Interface().(map[interface{}]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntfInt8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfInt8V(rv2i(rv).(map[interface{}]int8), e)
}
-func (_ fastpathT) EncMapIntfInt8V(v map[interface{}]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntfInt8V(v map[interface{}]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -3957,43 +4137,36 @@ func (_ fastpathT) EncMapIntfInt8V(v map[interface{}]int8, checkNil bool, e *Enc
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfInt16R(rv reflect.Value) {
- fastpathTV.EncMapIntfInt16V(rv.Interface().(map[interface{}]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntfInt16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfInt16V(rv2i(rv).(map[interface{}]int16), e)
}
-func (_ fastpathT) EncMapIntfInt16V(v map[interface{}]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntfInt16V(v map[interface{}]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -4010,43 +4183,36 @@ func (_ fastpathT) EncMapIntfInt16V(v map[interface{}]int16, checkNil bool, e *E
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfInt32R(rv reflect.Value) {
- fastpathTV.EncMapIntfInt32V(rv.Interface().(map[interface{}]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntfInt32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfInt32V(rv2i(rv).(map[interface{}]int32), e)
}
-func (_ fastpathT) EncMapIntfInt32V(v map[interface{}]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntfInt32V(v map[interface{}]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -4063,43 +4229,36 @@ func (_ fastpathT) EncMapIntfInt32V(v map[interface{}]int32, checkNil bool, e *E
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfInt64R(rv reflect.Value) {
- fastpathTV.EncMapIntfInt64V(rv.Interface().(map[interface{}]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntfInt64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfInt64V(rv2i(rv).(map[interface{}]int64), e)
}
-func (_ fastpathT) EncMapIntfInt64V(v map[interface{}]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntfInt64V(v map[interface{}]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -4116,43 +4275,36 @@ func (_ fastpathT) EncMapIntfInt64V(v map[interface{}]int64, checkNil bool, e *E
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfFloat32R(rv reflect.Value) {
- fastpathTV.EncMapIntfFloat32V(rv.Interface().(map[interface{}]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntfFloat32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfFloat32V(rv2i(rv).(map[interface{}]float32), e)
}
-func (_ fastpathT) EncMapIntfFloat32V(v map[interface{}]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntfFloat32V(v map[interface{}]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -4169,43 +4321,36 @@ func (_ fastpathT) EncMapIntfFloat32V(v map[interface{}]float32, checkNil bool,
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfFloat64R(rv reflect.Value) {
- fastpathTV.EncMapIntfFloat64V(rv.Interface().(map[interface{}]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntfFloat64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfFloat64V(rv2i(rv).(map[interface{}]float64), e)
}
-func (_ fastpathT) EncMapIntfFloat64V(v map[interface{}]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntfFloat64V(v map[interface{}]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -4222,43 +4367,36 @@ func (_ fastpathT) EncMapIntfFloat64V(v map[interface{}]float64, checkNil bool,
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntfBoolR(rv reflect.Value) {
- fastpathTV.EncMapIntfBoolV(rv.Interface().(map[interface{}]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntfBoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntfBoolV(rv2i(rv).(map[interface{}]bool), e)
}
-func (_ fastpathT) EncMapIntfBoolV(v map[interface{}]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntfBoolV(v map[interface{}]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding
e2 := NewEncoderBytes(&mksv, e.hh)
@@ -4275,43 +4413,36 @@ func (_ fastpathT) EncMapIntfBoolV(v map[interface{}]bool, checkNil bool, e *Enc
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.asis(v2[j].v)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[v2[j].i])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringIntfR(rv reflect.Value) {
- fastpathTV.EncMapStringIntfV(rv.Interface().(map[string]interface{}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringIntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringIntfV(rv2i(rv).(map[string]interface{}), e)
}
-func (_ fastpathT) EncMapStringIntfV(v map[string]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringIntfV(v map[string]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -4322,51 +4453,44 @@ func (_ fastpathT) EncMapStringIntfV(v map[string]interface{}, checkNil bool, e
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[string(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringStringR(rv reflect.Value) {
- fastpathTV.EncMapStringStringV(rv.Interface().(map[string]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringStringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringStringV(rv2i(rv).(map[string]string), e)
}
-func (_ fastpathT) EncMapStringStringV(v map[string]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringStringV(v map[string]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -4377,51 +4501,44 @@ func (_ fastpathT) EncMapStringStringV(v map[string]string, checkNil bool, e *En
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v[string(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringUintR(rv reflect.Value) {
- fastpathTV.EncMapStringUintV(rv.Interface().(map[string]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringUintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringUintV(rv2i(rv).(map[string]uint), e)
}
-func (_ fastpathT) EncMapStringUintV(v map[string]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringUintV(v map[string]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -4432,51 +4549,44 @@ func (_ fastpathT) EncMapStringUintV(v map[string]uint, checkNil bool, e *Encode
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[string(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringUint8R(rv reflect.Value) {
- fastpathTV.EncMapStringUint8V(rv.Interface().(map[string]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringUint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringUint8V(rv2i(rv).(map[string]uint8), e)
}
-func (_ fastpathT) EncMapStringUint8V(v map[string]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringUint8V(v map[string]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -4487,51 +4597,44 @@ func (_ fastpathT) EncMapStringUint8V(v map[string]uint8, checkNil bool, e *Enco
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[string(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringUint16R(rv reflect.Value) {
- fastpathTV.EncMapStringUint16V(rv.Interface().(map[string]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringUint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringUint16V(rv2i(rv).(map[string]uint16), e)
}
-func (_ fastpathT) EncMapStringUint16V(v map[string]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringUint16V(v map[string]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -4542,51 +4645,44 @@ func (_ fastpathT) EncMapStringUint16V(v map[string]uint16, checkNil bool, e *En
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[string(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringUint32R(rv reflect.Value) {
- fastpathTV.EncMapStringUint32V(rv.Interface().(map[string]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringUint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringUint32V(rv2i(rv).(map[string]uint32), e)
}
-func (_ fastpathT) EncMapStringUint32V(v map[string]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringUint32V(v map[string]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -4597,51 +4693,44 @@ func (_ fastpathT) EncMapStringUint32V(v map[string]uint32, checkNil bool, e *En
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[string(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringUint64R(rv reflect.Value) {
- fastpathTV.EncMapStringUint64V(rv.Interface().(map[string]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringUint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringUint64V(rv2i(rv).(map[string]uint64), e)
}
-func (_ fastpathT) EncMapStringUint64V(v map[string]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringUint64V(v map[string]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -4652,51 +4741,44 @@ func (_ fastpathT) EncMapStringUint64V(v map[string]uint64, checkNil bool, e *En
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[string(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringUintptrR(rv reflect.Value) {
- fastpathTV.EncMapStringUintptrV(rv.Interface().(map[string]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringUintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringUintptrV(rv2i(rv).(map[string]uintptr), e)
}
-func (_ fastpathT) EncMapStringUintptrV(v map[string]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringUintptrV(v map[string]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -4707,51 +4789,44 @@ func (_ fastpathT) EncMapStringUintptrV(v map[string]uintptr, checkNil bool, e *
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[string(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringIntR(rv reflect.Value) {
- fastpathTV.EncMapStringIntV(rv.Interface().(map[string]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringIntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringIntV(rv2i(rv).(map[string]int), e)
}
-func (_ fastpathT) EncMapStringIntV(v map[string]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringIntV(v map[string]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -4762,51 +4837,44 @@ func (_ fastpathT) EncMapStringIntV(v map[string]int, checkNil bool, e *Encoder)
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[string(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringInt8R(rv reflect.Value) {
- fastpathTV.EncMapStringInt8V(rv.Interface().(map[string]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringInt8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringInt8V(rv2i(rv).(map[string]int8), e)
}
-func (_ fastpathT) EncMapStringInt8V(v map[string]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringInt8V(v map[string]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -4817,51 +4885,44 @@ func (_ fastpathT) EncMapStringInt8V(v map[string]int8, checkNil bool, e *Encode
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[string(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringInt16R(rv reflect.Value) {
- fastpathTV.EncMapStringInt16V(rv.Interface().(map[string]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringInt16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringInt16V(rv2i(rv).(map[string]int16), e)
}
-func (_ fastpathT) EncMapStringInt16V(v map[string]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringInt16V(v map[string]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -4872,51 +4933,44 @@ func (_ fastpathT) EncMapStringInt16V(v map[string]int16, checkNil bool, e *Enco
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[string(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringInt32R(rv reflect.Value) {
- fastpathTV.EncMapStringInt32V(rv.Interface().(map[string]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringInt32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringInt32V(rv2i(rv).(map[string]int32), e)
}
-func (_ fastpathT) EncMapStringInt32V(v map[string]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringInt32V(v map[string]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -4927,51 +4981,44 @@ func (_ fastpathT) EncMapStringInt32V(v map[string]int32, checkNil bool, e *Enco
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[string(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringInt64R(rv reflect.Value) {
- fastpathTV.EncMapStringInt64V(rv.Interface().(map[string]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringInt64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringInt64V(rv2i(rv).(map[string]int64), e)
}
-func (_ fastpathT) EncMapStringInt64V(v map[string]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringInt64V(v map[string]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -4982,51 +5029,44 @@ func (_ fastpathT) EncMapStringInt64V(v map[string]int64, checkNil bool, e *Enco
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[string(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringFloat32R(rv reflect.Value) {
- fastpathTV.EncMapStringFloat32V(rv.Interface().(map[string]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringFloat32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringFloat32V(rv2i(rv).(map[string]float32), e)
}
-func (_ fastpathT) EncMapStringFloat32V(v map[string]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringFloat32V(v map[string]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -5037,51 +5077,44 @@ func (_ fastpathT) EncMapStringFloat32V(v map[string]float32, checkNil bool, e *
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v[string(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringFloat64R(rv reflect.Value) {
- fastpathTV.EncMapStringFloat64V(rv.Interface().(map[string]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringFloat64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringFloat64V(rv2i(rv).(map[string]float64), e)
}
-func (_ fastpathT) EncMapStringFloat64V(v map[string]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringFloat64V(v map[string]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -5092,51 +5125,44 @@ func (_ fastpathT) EncMapStringFloat64V(v map[string]float64, checkNil bool, e *
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v[string(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapStringBoolR(rv reflect.Value) {
- fastpathTV.EncMapStringBoolV(rv.Interface().(map[string]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapStringBoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapStringBoolV(rv2i(rv).(map[string]bool), e)
}
-func (_ fastpathT) EncMapStringBoolV(v map[string]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapStringBoolV(v map[string]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
if e.h.Canonical {
v2 := make([]string, len(v))
@@ -5147,51 +5173,44 @@ func (_ fastpathT) EncMapStringBoolV(v map[string]bool, checkNil bool, e *Encode
}
sort.Sort(stringSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v[string(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32IntfR(rv reflect.Value) {
- fastpathTV.EncMapFloat32IntfV(rv.Interface().(map[float32]interface{}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32IntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32IntfV(rv2i(rv).(map[float32]interface{}), e)
}
-func (_ fastpathT) EncMapFloat32IntfV(v map[float32]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32IntfV(v map[float32]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5201,43 +5220,36 @@ func (_ fastpathT) EncMapFloat32IntfV(v map[float32]interface{}, checkNil bool,
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[float32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32StringR(rv reflect.Value) {
- fastpathTV.EncMapFloat32StringV(rv.Interface().(map[float32]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32StringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32StringV(rv2i(rv).(map[float32]string), e)
}
-func (_ fastpathT) EncMapFloat32StringV(v map[float32]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32StringV(v map[float32]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5247,43 +5259,36 @@ func (_ fastpathT) EncMapFloat32StringV(v map[float32]string, checkNil bool, e *
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v[float32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32UintR(rv reflect.Value) {
- fastpathTV.EncMapFloat32UintV(rv.Interface().(map[float32]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32UintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32UintV(rv2i(rv).(map[float32]uint), e)
}
-func (_ fastpathT) EncMapFloat32UintV(v map[float32]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32UintV(v map[float32]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5293,43 +5298,36 @@ func (_ fastpathT) EncMapFloat32UintV(v map[float32]uint, checkNil bool, e *Enco
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[float32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32Uint8R(rv reflect.Value) {
- fastpathTV.EncMapFloat32Uint8V(rv.Interface().(map[float32]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32Uint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32Uint8V(rv2i(rv).(map[float32]uint8), e)
}
-func (_ fastpathT) EncMapFloat32Uint8V(v map[float32]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32Uint8V(v map[float32]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5339,43 +5337,36 @@ func (_ fastpathT) EncMapFloat32Uint8V(v map[float32]uint8, checkNil bool, e *En
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[float32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32Uint16R(rv reflect.Value) {
- fastpathTV.EncMapFloat32Uint16V(rv.Interface().(map[float32]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32Uint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32Uint16V(rv2i(rv).(map[float32]uint16), e)
}
-func (_ fastpathT) EncMapFloat32Uint16V(v map[float32]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32Uint16V(v map[float32]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5385,43 +5376,36 @@ func (_ fastpathT) EncMapFloat32Uint16V(v map[float32]uint16, checkNil bool, e *
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[float32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32Uint32R(rv reflect.Value) {
- fastpathTV.EncMapFloat32Uint32V(rv.Interface().(map[float32]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32Uint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32Uint32V(rv2i(rv).(map[float32]uint32), e)
}
-func (_ fastpathT) EncMapFloat32Uint32V(v map[float32]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32Uint32V(v map[float32]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5431,43 +5415,36 @@ func (_ fastpathT) EncMapFloat32Uint32V(v map[float32]uint32, checkNil bool, e *
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[float32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32Uint64R(rv reflect.Value) {
- fastpathTV.EncMapFloat32Uint64V(rv.Interface().(map[float32]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32Uint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32Uint64V(rv2i(rv).(map[float32]uint64), e)
}
-func (_ fastpathT) EncMapFloat32Uint64V(v map[float32]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32Uint64V(v map[float32]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5477,43 +5454,36 @@ func (_ fastpathT) EncMapFloat32Uint64V(v map[float32]uint64, checkNil bool, e *
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[float32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32UintptrR(rv reflect.Value) {
- fastpathTV.EncMapFloat32UintptrV(rv.Interface().(map[float32]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32UintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32UintptrV(rv2i(rv).(map[float32]uintptr), e)
}
-func (_ fastpathT) EncMapFloat32UintptrV(v map[float32]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32UintptrV(v map[float32]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5523,43 +5493,36 @@ func (_ fastpathT) EncMapFloat32UintptrV(v map[float32]uintptr, checkNil bool, e
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[float32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32IntR(rv reflect.Value) {
- fastpathTV.EncMapFloat32IntV(rv.Interface().(map[float32]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32IntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32IntV(rv2i(rv).(map[float32]int), e)
}
-func (_ fastpathT) EncMapFloat32IntV(v map[float32]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32IntV(v map[float32]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5569,43 +5532,36 @@ func (_ fastpathT) EncMapFloat32IntV(v map[float32]int, checkNil bool, e *Encode
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[float32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32Int8R(rv reflect.Value) {
- fastpathTV.EncMapFloat32Int8V(rv.Interface().(map[float32]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32Int8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32Int8V(rv2i(rv).(map[float32]int8), e)
}
-func (_ fastpathT) EncMapFloat32Int8V(v map[float32]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32Int8V(v map[float32]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5615,43 +5571,36 @@ func (_ fastpathT) EncMapFloat32Int8V(v map[float32]int8, checkNil bool, e *Enco
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[float32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32Int16R(rv reflect.Value) {
- fastpathTV.EncMapFloat32Int16V(rv.Interface().(map[float32]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32Int16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32Int16V(rv2i(rv).(map[float32]int16), e)
}
-func (_ fastpathT) EncMapFloat32Int16V(v map[float32]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32Int16V(v map[float32]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5661,43 +5610,36 @@ func (_ fastpathT) EncMapFloat32Int16V(v map[float32]int16, checkNil bool, e *En
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[float32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32Int32R(rv reflect.Value) {
- fastpathTV.EncMapFloat32Int32V(rv.Interface().(map[float32]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32Int32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32Int32V(rv2i(rv).(map[float32]int32), e)
}
-func (_ fastpathT) EncMapFloat32Int32V(v map[float32]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32Int32V(v map[float32]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5707,43 +5649,36 @@ func (_ fastpathT) EncMapFloat32Int32V(v map[float32]int32, checkNil bool, e *En
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[float32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32Int64R(rv reflect.Value) {
- fastpathTV.EncMapFloat32Int64V(rv.Interface().(map[float32]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32Int64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32Int64V(rv2i(rv).(map[float32]int64), e)
}
-func (_ fastpathT) EncMapFloat32Int64V(v map[float32]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32Int64V(v map[float32]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5753,43 +5688,36 @@ func (_ fastpathT) EncMapFloat32Int64V(v map[float32]int64, checkNil bool, e *En
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[float32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32Float32R(rv reflect.Value) {
- fastpathTV.EncMapFloat32Float32V(rv.Interface().(map[float32]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32Float32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32Float32V(rv2i(rv).(map[float32]float32), e)
}
-func (_ fastpathT) EncMapFloat32Float32V(v map[float32]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32Float32V(v map[float32]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5799,43 +5727,36 @@ func (_ fastpathT) EncMapFloat32Float32V(v map[float32]float32, checkNil bool, e
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v[float32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32Float64R(rv reflect.Value) {
- fastpathTV.EncMapFloat32Float64V(rv.Interface().(map[float32]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32Float64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32Float64V(rv2i(rv).(map[float32]float64), e)
}
-func (_ fastpathT) EncMapFloat32Float64V(v map[float32]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32Float64V(v map[float32]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5845,43 +5766,36 @@ func (_ fastpathT) EncMapFloat32Float64V(v map[float32]float64, checkNil bool, e
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v[float32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat32BoolR(rv reflect.Value) {
- fastpathTV.EncMapFloat32BoolV(rv.Interface().(map[float32]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat32BoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat32BoolV(rv2i(rv).(map[float32]bool), e)
}
-func (_ fastpathT) EncMapFloat32BoolV(v map[float32]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat32BoolV(v map[float32]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5891,43 +5805,36 @@ func (_ fastpathT) EncMapFloat32BoolV(v map[float32]bool, checkNil bool, e *Enco
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(float32(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v[float32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat32(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64IntfR(rv reflect.Value) {
- fastpathTV.EncMapFloat64IntfV(rv.Interface().(map[float64]interface{}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64IntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64IntfV(rv2i(rv).(map[float64]interface{}), e)
}
-func (_ fastpathT) EncMapFloat64IntfV(v map[float64]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64IntfV(v map[float64]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5937,43 +5844,36 @@ func (_ fastpathT) EncMapFloat64IntfV(v map[float64]interface{}, checkNil bool,
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[float64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64StringR(rv reflect.Value) {
- fastpathTV.EncMapFloat64StringV(rv.Interface().(map[float64]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64StringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64StringV(rv2i(rv).(map[float64]string), e)
}
-func (_ fastpathT) EncMapFloat64StringV(v map[float64]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64StringV(v map[float64]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -5983,43 +5883,36 @@ func (_ fastpathT) EncMapFloat64StringV(v map[float64]string, checkNil bool, e *
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v[float64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64UintR(rv reflect.Value) {
- fastpathTV.EncMapFloat64UintV(rv.Interface().(map[float64]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64UintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64UintV(rv2i(rv).(map[float64]uint), e)
}
-func (_ fastpathT) EncMapFloat64UintV(v map[float64]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64UintV(v map[float64]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -6029,43 +5922,36 @@ func (_ fastpathT) EncMapFloat64UintV(v map[float64]uint, checkNil bool, e *Enco
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[float64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64Uint8R(rv reflect.Value) {
- fastpathTV.EncMapFloat64Uint8V(rv.Interface().(map[float64]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64Uint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64Uint8V(rv2i(rv).(map[float64]uint8), e)
}
-func (_ fastpathT) EncMapFloat64Uint8V(v map[float64]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64Uint8V(v map[float64]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -6075,43 +5961,36 @@ func (_ fastpathT) EncMapFloat64Uint8V(v map[float64]uint8, checkNil bool, e *En
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[float64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64Uint16R(rv reflect.Value) {
- fastpathTV.EncMapFloat64Uint16V(rv.Interface().(map[float64]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64Uint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64Uint16V(rv2i(rv).(map[float64]uint16), e)
}
-func (_ fastpathT) EncMapFloat64Uint16V(v map[float64]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64Uint16V(v map[float64]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -6121,43 +6000,36 @@ func (_ fastpathT) EncMapFloat64Uint16V(v map[float64]uint16, checkNil bool, e *
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[float64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64Uint32R(rv reflect.Value) {
- fastpathTV.EncMapFloat64Uint32V(rv.Interface().(map[float64]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64Uint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64Uint32V(rv2i(rv).(map[float64]uint32), e)
}
-func (_ fastpathT) EncMapFloat64Uint32V(v map[float64]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64Uint32V(v map[float64]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -6167,43 +6039,36 @@ func (_ fastpathT) EncMapFloat64Uint32V(v map[float64]uint32, checkNil bool, e *
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[float64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64Uint64R(rv reflect.Value) {
- fastpathTV.EncMapFloat64Uint64V(rv.Interface().(map[float64]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64Uint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64Uint64V(rv2i(rv).(map[float64]uint64), e)
}
-func (_ fastpathT) EncMapFloat64Uint64V(v map[float64]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64Uint64V(v map[float64]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -6213,43 +6078,36 @@ func (_ fastpathT) EncMapFloat64Uint64V(v map[float64]uint64, checkNil bool, e *
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[float64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64UintptrR(rv reflect.Value) {
- fastpathTV.EncMapFloat64UintptrV(rv.Interface().(map[float64]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64UintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64UintptrV(rv2i(rv).(map[float64]uintptr), e)
}
-func (_ fastpathT) EncMapFloat64UintptrV(v map[float64]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64UintptrV(v map[float64]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -6259,43 +6117,36 @@ func (_ fastpathT) EncMapFloat64UintptrV(v map[float64]uintptr, checkNil bool, e
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[float64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64IntR(rv reflect.Value) {
- fastpathTV.EncMapFloat64IntV(rv.Interface().(map[float64]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64IntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64IntV(rv2i(rv).(map[float64]int), e)
}
-func (_ fastpathT) EncMapFloat64IntV(v map[float64]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64IntV(v map[float64]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -6305,43 +6156,36 @@ func (_ fastpathT) EncMapFloat64IntV(v map[float64]int, checkNil bool, e *Encode
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[float64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64Int8R(rv reflect.Value) {
- fastpathTV.EncMapFloat64Int8V(rv.Interface().(map[float64]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64Int8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64Int8V(rv2i(rv).(map[float64]int8), e)
}
-func (_ fastpathT) EncMapFloat64Int8V(v map[float64]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64Int8V(v map[float64]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -6351,43 +6195,36 @@ func (_ fastpathT) EncMapFloat64Int8V(v map[float64]int8, checkNil bool, e *Enco
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[float64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64Int16R(rv reflect.Value) {
- fastpathTV.EncMapFloat64Int16V(rv.Interface().(map[float64]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64Int16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64Int16V(rv2i(rv).(map[float64]int16), e)
}
-func (_ fastpathT) EncMapFloat64Int16V(v map[float64]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64Int16V(v map[float64]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -6397,43 +6234,36 @@ func (_ fastpathT) EncMapFloat64Int16V(v map[float64]int16, checkNil bool, e *En
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[float64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64Int32R(rv reflect.Value) {
- fastpathTV.EncMapFloat64Int32V(rv.Interface().(map[float64]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64Int32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64Int32V(rv2i(rv).(map[float64]int32), e)
}
-func (_ fastpathT) EncMapFloat64Int32V(v map[float64]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64Int32V(v map[float64]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -6443,43 +6273,36 @@ func (_ fastpathT) EncMapFloat64Int32V(v map[float64]int32, checkNil bool, e *En
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[float64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64Int64R(rv reflect.Value) {
- fastpathTV.EncMapFloat64Int64V(rv.Interface().(map[float64]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64Int64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64Int64V(rv2i(rv).(map[float64]int64), e)
}
-func (_ fastpathT) EncMapFloat64Int64V(v map[float64]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64Int64V(v map[float64]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -6489,43 +6312,36 @@ func (_ fastpathT) EncMapFloat64Int64V(v map[float64]int64, checkNil bool, e *En
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[float64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64Float32R(rv reflect.Value) {
- fastpathTV.EncMapFloat64Float32V(rv.Interface().(map[float64]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64Float32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64Float32V(rv2i(rv).(map[float64]float32), e)
}
-func (_ fastpathT) EncMapFloat64Float32V(v map[float64]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64Float32V(v map[float64]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -6535,43 +6351,36 @@ func (_ fastpathT) EncMapFloat64Float32V(v map[float64]float32, checkNil bool, e
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v[float64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64Float64R(rv reflect.Value) {
- fastpathTV.EncMapFloat64Float64V(rv.Interface().(map[float64]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64Float64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64Float64V(rv2i(rv).(map[float64]float64), e)
}
-func (_ fastpathT) EncMapFloat64Float64V(v map[float64]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64Float64V(v map[float64]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -6581,43 +6390,36 @@ func (_ fastpathT) EncMapFloat64Float64V(v map[float64]float64, checkNil bool, e
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v[float64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapFloat64BoolR(rv reflect.Value) {
- fastpathTV.EncMapFloat64BoolV(rv.Interface().(map[float64]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapFloat64BoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapFloat64BoolV(rv2i(rv).(map[float64]bool), e)
}
-func (_ fastpathT) EncMapFloat64BoolV(v map[float64]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapFloat64BoolV(v map[float64]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]float64, len(v))
var i int
@@ -6627,43 +6429,36 @@ func (_ fastpathT) EncMapFloat64BoolV(v map[float64]bool, checkNil bool, e *Enco
}
sort.Sort(floatSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(float64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v[float64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeFloat64(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintIntfR(rv reflect.Value) {
- fastpathTV.EncMapUintIntfV(rv.Interface().(map[uint]interface{}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintIntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintIntfV(rv2i(rv).(map[uint]interface{}), e)
}
-func (_ fastpathT) EncMapUintIntfV(v map[uint]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintIntfV(v map[uint]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -6673,43 +6468,36 @@ func (_ fastpathT) EncMapUintIntfV(v map[uint]interface{}, checkNil bool, e *Enc
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[uint(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintStringR(rv reflect.Value) {
- fastpathTV.EncMapUintStringV(rv.Interface().(map[uint]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintStringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintStringV(rv2i(rv).(map[uint]string), e)
}
-func (_ fastpathT) EncMapUintStringV(v map[uint]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintStringV(v map[uint]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -6719,43 +6507,36 @@ func (_ fastpathT) EncMapUintStringV(v map[uint]string, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v[uint(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintUintR(rv reflect.Value) {
- fastpathTV.EncMapUintUintV(rv.Interface().(map[uint]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintUintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintUintV(rv2i(rv).(map[uint]uint), e)
}
-func (_ fastpathT) EncMapUintUintV(v map[uint]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintUintV(v map[uint]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -6765,43 +6546,36 @@ func (_ fastpathT) EncMapUintUintV(v map[uint]uint, checkNil bool, e *Encoder) {
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintUint8R(rv reflect.Value) {
- fastpathTV.EncMapUintUint8V(rv.Interface().(map[uint]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintUint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintUint8V(rv2i(rv).(map[uint]uint8), e)
}
-func (_ fastpathT) EncMapUintUint8V(v map[uint]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintUint8V(v map[uint]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -6811,43 +6585,36 @@ func (_ fastpathT) EncMapUintUint8V(v map[uint]uint8, checkNil bool, e *Encoder)
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintUint16R(rv reflect.Value) {
- fastpathTV.EncMapUintUint16V(rv.Interface().(map[uint]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintUint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintUint16V(rv2i(rv).(map[uint]uint16), e)
}
-func (_ fastpathT) EncMapUintUint16V(v map[uint]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintUint16V(v map[uint]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -6857,43 +6624,36 @@ func (_ fastpathT) EncMapUintUint16V(v map[uint]uint16, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintUint32R(rv reflect.Value) {
- fastpathTV.EncMapUintUint32V(rv.Interface().(map[uint]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintUint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintUint32V(rv2i(rv).(map[uint]uint32), e)
}
-func (_ fastpathT) EncMapUintUint32V(v map[uint]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintUint32V(v map[uint]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -6903,43 +6663,36 @@ func (_ fastpathT) EncMapUintUint32V(v map[uint]uint32, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintUint64R(rv reflect.Value) {
- fastpathTV.EncMapUintUint64V(rv.Interface().(map[uint]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintUint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintUint64V(rv2i(rv).(map[uint]uint64), e)
}
-func (_ fastpathT) EncMapUintUint64V(v map[uint]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintUint64V(v map[uint]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -6949,43 +6702,36 @@ func (_ fastpathT) EncMapUintUint64V(v map[uint]uint64, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintUintptrR(rv reflect.Value) {
- fastpathTV.EncMapUintUintptrV(rv.Interface().(map[uint]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintUintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintUintptrV(rv2i(rv).(map[uint]uintptr), e)
}
-func (_ fastpathT) EncMapUintUintptrV(v map[uint]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintUintptrV(v map[uint]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -6995,43 +6741,36 @@ func (_ fastpathT) EncMapUintUintptrV(v map[uint]uintptr, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[uint(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintIntR(rv reflect.Value) {
- fastpathTV.EncMapUintIntV(rv.Interface().(map[uint]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintIntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintIntV(rv2i(rv).(map[uint]int), e)
}
-func (_ fastpathT) EncMapUintIntV(v map[uint]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintIntV(v map[uint]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7041,43 +6780,36 @@ func (_ fastpathT) EncMapUintIntV(v map[uint]int, checkNil bool, e *Encoder) {
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintInt8R(rv reflect.Value) {
- fastpathTV.EncMapUintInt8V(rv.Interface().(map[uint]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintInt8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintInt8V(rv2i(rv).(map[uint]int8), e)
}
-func (_ fastpathT) EncMapUintInt8V(v map[uint]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintInt8V(v map[uint]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7087,43 +6819,36 @@ func (_ fastpathT) EncMapUintInt8V(v map[uint]int8, checkNil bool, e *Encoder) {
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintInt16R(rv reflect.Value) {
- fastpathTV.EncMapUintInt16V(rv.Interface().(map[uint]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintInt16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintInt16V(rv2i(rv).(map[uint]int16), e)
}
-func (_ fastpathT) EncMapUintInt16V(v map[uint]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintInt16V(v map[uint]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7133,43 +6858,36 @@ func (_ fastpathT) EncMapUintInt16V(v map[uint]int16, checkNil bool, e *Encoder)
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintInt32R(rv reflect.Value) {
- fastpathTV.EncMapUintInt32V(rv.Interface().(map[uint]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintInt32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintInt32V(rv2i(rv).(map[uint]int32), e)
}
-func (_ fastpathT) EncMapUintInt32V(v map[uint]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintInt32V(v map[uint]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7179,43 +6897,36 @@ func (_ fastpathT) EncMapUintInt32V(v map[uint]int32, checkNil bool, e *Encoder)
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintInt64R(rv reflect.Value) {
- fastpathTV.EncMapUintInt64V(rv.Interface().(map[uint]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintInt64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintInt64V(rv2i(rv).(map[uint]int64), e)
}
-func (_ fastpathT) EncMapUintInt64V(v map[uint]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintInt64V(v map[uint]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7225,43 +6936,36 @@ func (_ fastpathT) EncMapUintInt64V(v map[uint]int64, checkNil bool, e *Encoder)
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintFloat32R(rv reflect.Value) {
- fastpathTV.EncMapUintFloat32V(rv.Interface().(map[uint]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintFloat32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintFloat32V(rv2i(rv).(map[uint]float32), e)
}
-func (_ fastpathT) EncMapUintFloat32V(v map[uint]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintFloat32V(v map[uint]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7271,43 +6975,36 @@ func (_ fastpathT) EncMapUintFloat32V(v map[uint]float32, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v[uint(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintFloat64R(rv reflect.Value) {
- fastpathTV.EncMapUintFloat64V(rv.Interface().(map[uint]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintFloat64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintFloat64V(rv2i(rv).(map[uint]float64), e)
}
-func (_ fastpathT) EncMapUintFloat64V(v map[uint]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintFloat64V(v map[uint]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7317,43 +7014,36 @@ func (_ fastpathT) EncMapUintFloat64V(v map[uint]float64, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v[uint(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintBoolR(rv reflect.Value) {
- fastpathTV.EncMapUintBoolV(rv.Interface().(map[uint]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintBoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintBoolV(rv2i(rv).(map[uint]bool), e)
}
-func (_ fastpathT) EncMapUintBoolV(v map[uint]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintBoolV(v map[uint]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7363,43 +7053,36 @@ func (_ fastpathT) EncMapUintBoolV(v map[uint]bool, checkNil bool, e *Encoder) {
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v[uint(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8IntfR(rv reflect.Value) {
- fastpathTV.EncMapUint8IntfV(rv.Interface().(map[uint8]interface{}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8IntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), e)
}
-func (_ fastpathT) EncMapUint8IntfV(v map[uint8]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8IntfV(v map[uint8]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7409,43 +7092,36 @@ func (_ fastpathT) EncMapUint8IntfV(v map[uint8]interface{}, checkNil bool, e *E
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[uint8(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8StringR(rv reflect.Value) {
- fastpathTV.EncMapUint8StringV(rv.Interface().(map[uint8]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8StringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8StringV(rv2i(rv).(map[uint8]string), e)
}
-func (_ fastpathT) EncMapUint8StringV(v map[uint8]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8StringV(v map[uint8]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7455,43 +7131,36 @@ func (_ fastpathT) EncMapUint8StringV(v map[uint8]string, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v[uint8(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8UintR(rv reflect.Value) {
- fastpathTV.EncMapUint8UintV(rv.Interface().(map[uint8]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8UintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8UintV(rv2i(rv).(map[uint8]uint), e)
}
-func (_ fastpathT) EncMapUint8UintV(v map[uint8]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8UintV(v map[uint8]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7501,43 +7170,36 @@ func (_ fastpathT) EncMapUint8UintV(v map[uint8]uint, checkNil bool, e *Encoder)
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8Uint8R(rv reflect.Value) {
- fastpathTV.EncMapUint8Uint8V(rv.Interface().(map[uint8]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8Uint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), e)
}
-func (_ fastpathT) EncMapUint8Uint8V(v map[uint8]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8Uint8V(v map[uint8]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7547,43 +7209,36 @@ func (_ fastpathT) EncMapUint8Uint8V(v map[uint8]uint8, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8Uint16R(rv reflect.Value) {
- fastpathTV.EncMapUint8Uint16V(rv.Interface().(map[uint8]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8Uint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8Uint16V(rv2i(rv).(map[uint8]uint16), e)
}
-func (_ fastpathT) EncMapUint8Uint16V(v map[uint8]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8Uint16V(v map[uint8]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7593,43 +7248,36 @@ func (_ fastpathT) EncMapUint8Uint16V(v map[uint8]uint16, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8Uint32R(rv reflect.Value) {
- fastpathTV.EncMapUint8Uint32V(rv.Interface().(map[uint8]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8Uint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8Uint32V(rv2i(rv).(map[uint8]uint32), e)
}
-func (_ fastpathT) EncMapUint8Uint32V(v map[uint8]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8Uint32V(v map[uint8]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7639,43 +7287,36 @@ func (_ fastpathT) EncMapUint8Uint32V(v map[uint8]uint32, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8Uint64R(rv reflect.Value) {
- fastpathTV.EncMapUint8Uint64V(rv.Interface().(map[uint8]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8Uint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), e)
}
-func (_ fastpathT) EncMapUint8Uint64V(v map[uint8]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8Uint64V(v map[uint8]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7685,43 +7326,36 @@ func (_ fastpathT) EncMapUint8Uint64V(v map[uint8]uint64, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8UintptrR(rv reflect.Value) {
- fastpathTV.EncMapUint8UintptrV(rv.Interface().(map[uint8]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8UintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8UintptrV(rv2i(rv).(map[uint8]uintptr), e)
}
-func (_ fastpathT) EncMapUint8UintptrV(v map[uint8]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8UintptrV(v map[uint8]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7731,43 +7365,36 @@ func (_ fastpathT) EncMapUint8UintptrV(v map[uint8]uintptr, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[uint8(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8IntR(rv reflect.Value) {
- fastpathTV.EncMapUint8IntV(rv.Interface().(map[uint8]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8IntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8IntV(rv2i(rv).(map[uint8]int), e)
}
-func (_ fastpathT) EncMapUint8IntV(v map[uint8]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8IntV(v map[uint8]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7777,43 +7404,36 @@ func (_ fastpathT) EncMapUint8IntV(v map[uint8]int, checkNil bool, e *Encoder) {
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8Int8R(rv reflect.Value) {
- fastpathTV.EncMapUint8Int8V(rv.Interface().(map[uint8]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8Int8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8Int8V(rv2i(rv).(map[uint8]int8), e)
}
-func (_ fastpathT) EncMapUint8Int8V(v map[uint8]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8Int8V(v map[uint8]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7823,43 +7443,36 @@ func (_ fastpathT) EncMapUint8Int8V(v map[uint8]int8, checkNil bool, e *Encoder)
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8Int16R(rv reflect.Value) {
- fastpathTV.EncMapUint8Int16V(rv.Interface().(map[uint8]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8Int16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8Int16V(rv2i(rv).(map[uint8]int16), e)
}
-func (_ fastpathT) EncMapUint8Int16V(v map[uint8]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8Int16V(v map[uint8]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7869,43 +7482,36 @@ func (_ fastpathT) EncMapUint8Int16V(v map[uint8]int16, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8Int32R(rv reflect.Value) {
- fastpathTV.EncMapUint8Int32V(rv.Interface().(map[uint8]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8Int32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8Int32V(rv2i(rv).(map[uint8]int32), e)
}
-func (_ fastpathT) EncMapUint8Int32V(v map[uint8]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8Int32V(v map[uint8]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7915,43 +7521,36 @@ func (_ fastpathT) EncMapUint8Int32V(v map[uint8]int32, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8Int64R(rv reflect.Value) {
- fastpathTV.EncMapUint8Int64V(rv.Interface().(map[uint8]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8Int64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8Int64V(rv2i(rv).(map[uint8]int64), e)
}
-func (_ fastpathT) EncMapUint8Int64V(v map[uint8]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8Int64V(v map[uint8]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -7961,43 +7560,36 @@ func (_ fastpathT) EncMapUint8Int64V(v map[uint8]int64, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8Float32R(rv reflect.Value) {
- fastpathTV.EncMapUint8Float32V(rv.Interface().(map[uint8]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8Float32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8Float32V(rv2i(rv).(map[uint8]float32), e)
}
-func (_ fastpathT) EncMapUint8Float32V(v map[uint8]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8Float32V(v map[uint8]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8007,43 +7599,36 @@ func (_ fastpathT) EncMapUint8Float32V(v map[uint8]float32, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v[uint8(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8Float64R(rv reflect.Value) {
- fastpathTV.EncMapUint8Float64V(rv.Interface().(map[uint8]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8Float64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8Float64V(rv2i(rv).(map[uint8]float64), e)
}
-func (_ fastpathT) EncMapUint8Float64V(v map[uint8]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8Float64V(v map[uint8]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8053,43 +7638,36 @@ func (_ fastpathT) EncMapUint8Float64V(v map[uint8]float64, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v[uint8(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint8BoolR(rv reflect.Value) {
- fastpathTV.EncMapUint8BoolV(rv.Interface().(map[uint8]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint8BoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint8BoolV(rv2i(rv).(map[uint8]bool), e)
}
-func (_ fastpathT) EncMapUint8BoolV(v map[uint8]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint8BoolV(v map[uint8]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8099,43 +7677,36 @@ func (_ fastpathT) EncMapUint8BoolV(v map[uint8]bool, checkNil bool, e *Encoder)
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v[uint8(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16IntfR(rv reflect.Value) {
- fastpathTV.EncMapUint16IntfV(rv.Interface().(map[uint16]interface{}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16IntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16IntfV(rv2i(rv).(map[uint16]interface{}), e)
}
-func (_ fastpathT) EncMapUint16IntfV(v map[uint16]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16IntfV(v map[uint16]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8145,43 +7716,36 @@ func (_ fastpathT) EncMapUint16IntfV(v map[uint16]interface{}, checkNil bool, e
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[uint16(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16StringR(rv reflect.Value) {
- fastpathTV.EncMapUint16StringV(rv.Interface().(map[uint16]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16StringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16StringV(rv2i(rv).(map[uint16]string), e)
}
-func (_ fastpathT) EncMapUint16StringV(v map[uint16]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16StringV(v map[uint16]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8191,43 +7755,36 @@ func (_ fastpathT) EncMapUint16StringV(v map[uint16]string, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v[uint16(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16UintR(rv reflect.Value) {
- fastpathTV.EncMapUint16UintV(rv.Interface().(map[uint16]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16UintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16UintV(rv2i(rv).(map[uint16]uint), e)
}
-func (_ fastpathT) EncMapUint16UintV(v map[uint16]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16UintV(v map[uint16]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8237,43 +7794,36 @@ func (_ fastpathT) EncMapUint16UintV(v map[uint16]uint, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16Uint8R(rv reflect.Value) {
- fastpathTV.EncMapUint16Uint8V(rv.Interface().(map[uint16]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16Uint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16Uint8V(rv2i(rv).(map[uint16]uint8), e)
}
-func (_ fastpathT) EncMapUint16Uint8V(v map[uint16]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16Uint8V(v map[uint16]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8283,43 +7833,36 @@ func (_ fastpathT) EncMapUint16Uint8V(v map[uint16]uint8, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16Uint16R(rv reflect.Value) {
- fastpathTV.EncMapUint16Uint16V(rv.Interface().(map[uint16]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16Uint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16Uint16V(rv2i(rv).(map[uint16]uint16), e)
}
-func (_ fastpathT) EncMapUint16Uint16V(v map[uint16]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16Uint16V(v map[uint16]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8329,43 +7872,36 @@ func (_ fastpathT) EncMapUint16Uint16V(v map[uint16]uint16, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16Uint32R(rv reflect.Value) {
- fastpathTV.EncMapUint16Uint32V(rv.Interface().(map[uint16]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16Uint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16Uint32V(rv2i(rv).(map[uint16]uint32), e)
}
-func (_ fastpathT) EncMapUint16Uint32V(v map[uint16]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16Uint32V(v map[uint16]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8375,43 +7911,36 @@ func (_ fastpathT) EncMapUint16Uint32V(v map[uint16]uint32, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16Uint64R(rv reflect.Value) {
- fastpathTV.EncMapUint16Uint64V(rv.Interface().(map[uint16]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16Uint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16Uint64V(rv2i(rv).(map[uint16]uint64), e)
}
-func (_ fastpathT) EncMapUint16Uint64V(v map[uint16]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16Uint64V(v map[uint16]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8421,43 +7950,36 @@ func (_ fastpathT) EncMapUint16Uint64V(v map[uint16]uint64, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16UintptrR(rv reflect.Value) {
- fastpathTV.EncMapUint16UintptrV(rv.Interface().(map[uint16]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16UintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16UintptrV(rv2i(rv).(map[uint16]uintptr), e)
}
-func (_ fastpathT) EncMapUint16UintptrV(v map[uint16]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16UintptrV(v map[uint16]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8467,43 +7989,36 @@ func (_ fastpathT) EncMapUint16UintptrV(v map[uint16]uintptr, checkNil bool, e *
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[uint16(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16IntR(rv reflect.Value) {
- fastpathTV.EncMapUint16IntV(rv.Interface().(map[uint16]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16IntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16IntV(rv2i(rv).(map[uint16]int), e)
}
-func (_ fastpathT) EncMapUint16IntV(v map[uint16]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16IntV(v map[uint16]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8513,43 +8028,36 @@ func (_ fastpathT) EncMapUint16IntV(v map[uint16]int, checkNil bool, e *Encoder)
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16Int8R(rv reflect.Value) {
- fastpathTV.EncMapUint16Int8V(rv.Interface().(map[uint16]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16Int8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16Int8V(rv2i(rv).(map[uint16]int8), e)
}
-func (_ fastpathT) EncMapUint16Int8V(v map[uint16]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16Int8V(v map[uint16]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8559,43 +8067,36 @@ func (_ fastpathT) EncMapUint16Int8V(v map[uint16]int8, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16Int16R(rv reflect.Value) {
- fastpathTV.EncMapUint16Int16V(rv.Interface().(map[uint16]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16Int16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16Int16V(rv2i(rv).(map[uint16]int16), e)
}
-func (_ fastpathT) EncMapUint16Int16V(v map[uint16]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16Int16V(v map[uint16]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8605,43 +8106,36 @@ func (_ fastpathT) EncMapUint16Int16V(v map[uint16]int16, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16Int32R(rv reflect.Value) {
- fastpathTV.EncMapUint16Int32V(rv.Interface().(map[uint16]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16Int32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16Int32V(rv2i(rv).(map[uint16]int32), e)
}
-func (_ fastpathT) EncMapUint16Int32V(v map[uint16]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16Int32V(v map[uint16]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8651,43 +8145,36 @@ func (_ fastpathT) EncMapUint16Int32V(v map[uint16]int32, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16Int64R(rv reflect.Value) {
- fastpathTV.EncMapUint16Int64V(rv.Interface().(map[uint16]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16Int64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16Int64V(rv2i(rv).(map[uint16]int64), e)
}
-func (_ fastpathT) EncMapUint16Int64V(v map[uint16]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16Int64V(v map[uint16]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8697,43 +8184,36 @@ func (_ fastpathT) EncMapUint16Int64V(v map[uint16]int64, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16Float32R(rv reflect.Value) {
- fastpathTV.EncMapUint16Float32V(rv.Interface().(map[uint16]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16Float32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16Float32V(rv2i(rv).(map[uint16]float32), e)
}
-func (_ fastpathT) EncMapUint16Float32V(v map[uint16]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16Float32V(v map[uint16]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8743,43 +8223,36 @@ func (_ fastpathT) EncMapUint16Float32V(v map[uint16]float32, checkNil bool, e *
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v[uint16(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16Float64R(rv reflect.Value) {
- fastpathTV.EncMapUint16Float64V(rv.Interface().(map[uint16]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16Float64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16Float64V(rv2i(rv).(map[uint16]float64), e)
}
-func (_ fastpathT) EncMapUint16Float64V(v map[uint16]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16Float64V(v map[uint16]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8789,43 +8262,36 @@ func (_ fastpathT) EncMapUint16Float64V(v map[uint16]float64, checkNil bool, e *
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v[uint16(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint16BoolR(rv reflect.Value) {
- fastpathTV.EncMapUint16BoolV(rv.Interface().(map[uint16]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint16BoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint16BoolV(rv2i(rv).(map[uint16]bool), e)
}
-func (_ fastpathT) EncMapUint16BoolV(v map[uint16]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint16BoolV(v map[uint16]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8835,43 +8301,36 @@ func (_ fastpathT) EncMapUint16BoolV(v map[uint16]bool, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v[uint16(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32IntfR(rv reflect.Value) {
- fastpathTV.EncMapUint32IntfV(rv.Interface().(map[uint32]interface{}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32IntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32IntfV(rv2i(rv).(map[uint32]interface{}), e)
}
-func (_ fastpathT) EncMapUint32IntfV(v map[uint32]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32IntfV(v map[uint32]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8881,43 +8340,36 @@ func (_ fastpathT) EncMapUint32IntfV(v map[uint32]interface{}, checkNil bool, e
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[uint32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32StringR(rv reflect.Value) {
- fastpathTV.EncMapUint32StringV(rv.Interface().(map[uint32]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32StringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32StringV(rv2i(rv).(map[uint32]string), e)
}
-func (_ fastpathT) EncMapUint32StringV(v map[uint32]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32StringV(v map[uint32]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8927,43 +8379,36 @@ func (_ fastpathT) EncMapUint32StringV(v map[uint32]string, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v[uint32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32UintR(rv reflect.Value) {
- fastpathTV.EncMapUint32UintV(rv.Interface().(map[uint32]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32UintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32UintV(rv2i(rv).(map[uint32]uint), e)
}
-func (_ fastpathT) EncMapUint32UintV(v map[uint32]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32UintV(v map[uint32]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -8973,43 +8418,36 @@ func (_ fastpathT) EncMapUint32UintV(v map[uint32]uint, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32Uint8R(rv reflect.Value) {
- fastpathTV.EncMapUint32Uint8V(rv.Interface().(map[uint32]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32Uint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32Uint8V(rv2i(rv).(map[uint32]uint8), e)
}
-func (_ fastpathT) EncMapUint32Uint8V(v map[uint32]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32Uint8V(v map[uint32]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9019,43 +8457,36 @@ func (_ fastpathT) EncMapUint32Uint8V(v map[uint32]uint8, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32Uint16R(rv reflect.Value) {
- fastpathTV.EncMapUint32Uint16V(rv.Interface().(map[uint32]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32Uint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32Uint16V(rv2i(rv).(map[uint32]uint16), e)
}
-func (_ fastpathT) EncMapUint32Uint16V(v map[uint32]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32Uint16V(v map[uint32]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9065,43 +8496,36 @@ func (_ fastpathT) EncMapUint32Uint16V(v map[uint32]uint16, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32Uint32R(rv reflect.Value) {
- fastpathTV.EncMapUint32Uint32V(rv.Interface().(map[uint32]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32Uint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32Uint32V(rv2i(rv).(map[uint32]uint32), e)
}
-func (_ fastpathT) EncMapUint32Uint32V(v map[uint32]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32Uint32V(v map[uint32]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9111,43 +8535,36 @@ func (_ fastpathT) EncMapUint32Uint32V(v map[uint32]uint32, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32Uint64R(rv reflect.Value) {
- fastpathTV.EncMapUint32Uint64V(rv.Interface().(map[uint32]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32Uint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32Uint64V(rv2i(rv).(map[uint32]uint64), e)
}
-func (_ fastpathT) EncMapUint32Uint64V(v map[uint32]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32Uint64V(v map[uint32]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9157,43 +8574,36 @@ func (_ fastpathT) EncMapUint32Uint64V(v map[uint32]uint64, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32UintptrR(rv reflect.Value) {
- fastpathTV.EncMapUint32UintptrV(rv.Interface().(map[uint32]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32UintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32UintptrV(rv2i(rv).(map[uint32]uintptr), e)
}
-func (_ fastpathT) EncMapUint32UintptrV(v map[uint32]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32UintptrV(v map[uint32]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9203,43 +8613,36 @@ func (_ fastpathT) EncMapUint32UintptrV(v map[uint32]uintptr, checkNil bool, e *
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[uint32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32IntR(rv reflect.Value) {
- fastpathTV.EncMapUint32IntV(rv.Interface().(map[uint32]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32IntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32IntV(rv2i(rv).(map[uint32]int), e)
}
-func (_ fastpathT) EncMapUint32IntV(v map[uint32]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32IntV(v map[uint32]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9249,43 +8652,36 @@ func (_ fastpathT) EncMapUint32IntV(v map[uint32]int, checkNil bool, e *Encoder)
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32Int8R(rv reflect.Value) {
- fastpathTV.EncMapUint32Int8V(rv.Interface().(map[uint32]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32Int8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32Int8V(rv2i(rv).(map[uint32]int8), e)
}
-func (_ fastpathT) EncMapUint32Int8V(v map[uint32]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32Int8V(v map[uint32]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9295,43 +8691,36 @@ func (_ fastpathT) EncMapUint32Int8V(v map[uint32]int8, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32Int16R(rv reflect.Value) {
- fastpathTV.EncMapUint32Int16V(rv.Interface().(map[uint32]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32Int16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32Int16V(rv2i(rv).(map[uint32]int16), e)
}
-func (_ fastpathT) EncMapUint32Int16V(v map[uint32]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32Int16V(v map[uint32]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9341,43 +8730,36 @@ func (_ fastpathT) EncMapUint32Int16V(v map[uint32]int16, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32Int32R(rv reflect.Value) {
- fastpathTV.EncMapUint32Int32V(rv.Interface().(map[uint32]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32Int32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32Int32V(rv2i(rv).(map[uint32]int32), e)
}
-func (_ fastpathT) EncMapUint32Int32V(v map[uint32]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32Int32V(v map[uint32]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9387,43 +8769,36 @@ func (_ fastpathT) EncMapUint32Int32V(v map[uint32]int32, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32Int64R(rv reflect.Value) {
- fastpathTV.EncMapUint32Int64V(rv.Interface().(map[uint32]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32Int64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32Int64V(rv2i(rv).(map[uint32]int64), e)
}
-func (_ fastpathT) EncMapUint32Int64V(v map[uint32]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32Int64V(v map[uint32]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9433,43 +8808,36 @@ func (_ fastpathT) EncMapUint32Int64V(v map[uint32]int64, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32Float32R(rv reflect.Value) {
- fastpathTV.EncMapUint32Float32V(rv.Interface().(map[uint32]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32Float32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32Float32V(rv2i(rv).(map[uint32]float32), e)
}
-func (_ fastpathT) EncMapUint32Float32V(v map[uint32]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32Float32V(v map[uint32]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9479,43 +8847,36 @@ func (_ fastpathT) EncMapUint32Float32V(v map[uint32]float32, checkNil bool, e *
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v[uint32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32Float64R(rv reflect.Value) {
- fastpathTV.EncMapUint32Float64V(rv.Interface().(map[uint32]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32Float64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32Float64V(rv2i(rv).(map[uint32]float64), e)
}
-func (_ fastpathT) EncMapUint32Float64V(v map[uint32]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32Float64V(v map[uint32]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9525,43 +8886,36 @@ func (_ fastpathT) EncMapUint32Float64V(v map[uint32]float64, checkNil bool, e *
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v[uint32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint32BoolR(rv reflect.Value) {
- fastpathTV.EncMapUint32BoolV(rv.Interface().(map[uint32]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint32BoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint32BoolV(rv2i(rv).(map[uint32]bool), e)
}
-func (_ fastpathT) EncMapUint32BoolV(v map[uint32]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint32BoolV(v map[uint32]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9571,43 +8925,36 @@ func (_ fastpathT) EncMapUint32BoolV(v map[uint32]bool, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v[uint32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64IntfR(rv reflect.Value) {
- fastpathTV.EncMapUint64IntfV(rv.Interface().(map[uint64]interface{}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64IntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), e)
}
-func (_ fastpathT) EncMapUint64IntfV(v map[uint64]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64IntfV(v map[uint64]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9617,43 +8964,36 @@ func (_ fastpathT) EncMapUint64IntfV(v map[uint64]interface{}, checkNil bool, e
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[uint64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64StringR(rv reflect.Value) {
- fastpathTV.EncMapUint64StringV(rv.Interface().(map[uint64]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64StringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64StringV(rv2i(rv).(map[uint64]string), e)
}
-func (_ fastpathT) EncMapUint64StringV(v map[uint64]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64StringV(v map[uint64]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9663,43 +9003,36 @@ func (_ fastpathT) EncMapUint64StringV(v map[uint64]string, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v[uint64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64UintR(rv reflect.Value) {
- fastpathTV.EncMapUint64UintV(rv.Interface().(map[uint64]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64UintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64UintV(rv2i(rv).(map[uint64]uint), e)
}
-func (_ fastpathT) EncMapUint64UintV(v map[uint64]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64UintV(v map[uint64]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9709,43 +9042,36 @@ func (_ fastpathT) EncMapUint64UintV(v map[uint64]uint, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64Uint8R(rv reflect.Value) {
- fastpathTV.EncMapUint64Uint8V(rv.Interface().(map[uint64]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64Uint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), e)
}
-func (_ fastpathT) EncMapUint64Uint8V(v map[uint64]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64Uint8V(v map[uint64]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9755,43 +9081,36 @@ func (_ fastpathT) EncMapUint64Uint8V(v map[uint64]uint8, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64Uint16R(rv reflect.Value) {
- fastpathTV.EncMapUint64Uint16V(rv.Interface().(map[uint64]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64Uint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64Uint16V(rv2i(rv).(map[uint64]uint16), e)
}
-func (_ fastpathT) EncMapUint64Uint16V(v map[uint64]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64Uint16V(v map[uint64]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9801,43 +9120,36 @@ func (_ fastpathT) EncMapUint64Uint16V(v map[uint64]uint16, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64Uint32R(rv reflect.Value) {
- fastpathTV.EncMapUint64Uint32V(rv.Interface().(map[uint64]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64Uint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64Uint32V(rv2i(rv).(map[uint64]uint32), e)
}
-func (_ fastpathT) EncMapUint64Uint32V(v map[uint64]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64Uint32V(v map[uint64]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9847,43 +9159,36 @@ func (_ fastpathT) EncMapUint64Uint32V(v map[uint64]uint32, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64Uint64R(rv reflect.Value) {
- fastpathTV.EncMapUint64Uint64V(rv.Interface().(map[uint64]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64Uint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), e)
}
-func (_ fastpathT) EncMapUint64Uint64V(v map[uint64]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64Uint64V(v map[uint64]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9893,43 +9198,36 @@ func (_ fastpathT) EncMapUint64Uint64V(v map[uint64]uint64, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uint64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64UintptrR(rv reflect.Value) {
- fastpathTV.EncMapUint64UintptrV(rv.Interface().(map[uint64]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64UintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64UintptrV(rv2i(rv).(map[uint64]uintptr), e)
}
-func (_ fastpathT) EncMapUint64UintptrV(v map[uint64]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64UintptrV(v map[uint64]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9939,43 +9237,36 @@ func (_ fastpathT) EncMapUint64UintptrV(v map[uint64]uintptr, checkNil bool, e *
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[uint64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64IntR(rv reflect.Value) {
- fastpathTV.EncMapUint64IntV(rv.Interface().(map[uint64]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64IntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64IntV(rv2i(rv).(map[uint64]int), e)
}
-func (_ fastpathT) EncMapUint64IntV(v map[uint64]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64IntV(v map[uint64]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -9985,43 +9276,36 @@ func (_ fastpathT) EncMapUint64IntV(v map[uint64]int, checkNil bool, e *Encoder)
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64Int8R(rv reflect.Value) {
- fastpathTV.EncMapUint64Int8V(rv.Interface().(map[uint64]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64Int8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64Int8V(rv2i(rv).(map[uint64]int8), e)
}
-func (_ fastpathT) EncMapUint64Int8V(v map[uint64]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64Int8V(v map[uint64]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10031,43 +9315,36 @@ func (_ fastpathT) EncMapUint64Int8V(v map[uint64]int8, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64Int16R(rv reflect.Value) {
- fastpathTV.EncMapUint64Int16V(rv.Interface().(map[uint64]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64Int16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64Int16V(rv2i(rv).(map[uint64]int16), e)
}
-func (_ fastpathT) EncMapUint64Int16V(v map[uint64]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64Int16V(v map[uint64]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10077,43 +9354,36 @@ func (_ fastpathT) EncMapUint64Int16V(v map[uint64]int16, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64Int32R(rv reflect.Value) {
- fastpathTV.EncMapUint64Int32V(rv.Interface().(map[uint64]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64Int32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64Int32V(rv2i(rv).(map[uint64]int32), e)
}
-func (_ fastpathT) EncMapUint64Int32V(v map[uint64]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64Int32V(v map[uint64]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10123,43 +9393,36 @@ func (_ fastpathT) EncMapUint64Int32V(v map[uint64]int32, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64Int64R(rv reflect.Value) {
- fastpathTV.EncMapUint64Int64V(rv.Interface().(map[uint64]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64Int64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64Int64V(rv2i(rv).(map[uint64]int64), e)
}
-func (_ fastpathT) EncMapUint64Int64V(v map[uint64]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64Int64V(v map[uint64]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10169,43 +9432,36 @@ func (_ fastpathT) EncMapUint64Int64V(v map[uint64]int64, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uint64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64Float32R(rv reflect.Value) {
- fastpathTV.EncMapUint64Float32V(rv.Interface().(map[uint64]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64Float32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64Float32V(rv2i(rv).(map[uint64]float32), e)
}
-func (_ fastpathT) EncMapUint64Float32V(v map[uint64]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64Float32V(v map[uint64]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10215,43 +9471,36 @@ func (_ fastpathT) EncMapUint64Float32V(v map[uint64]float32, checkNil bool, e *
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v[uint64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64Float64R(rv reflect.Value) {
- fastpathTV.EncMapUint64Float64V(rv.Interface().(map[uint64]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64Float64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64Float64V(rv2i(rv).(map[uint64]float64), e)
}
-func (_ fastpathT) EncMapUint64Float64V(v map[uint64]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64Float64V(v map[uint64]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10261,43 +9510,36 @@ func (_ fastpathT) EncMapUint64Float64V(v map[uint64]float64, checkNil bool, e *
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v[uint64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUint64BoolR(rv reflect.Value) {
- fastpathTV.EncMapUint64BoolV(rv.Interface().(map[uint64]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUint64BoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUint64BoolV(rv2i(rv).(map[uint64]bool), e)
}
-func (_ fastpathT) EncMapUint64BoolV(v map[uint64]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUint64BoolV(v map[uint64]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10307,43 +9549,36 @@ func (_ fastpathT) EncMapUint64BoolV(v map[uint64]bool, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(uint64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v[uint64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeUint(uint64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrIntfR(rv reflect.Value) {
- fastpathTV.EncMapUintptrIntfV(rv.Interface().(map[uintptr]interface{}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrIntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrIntfV(rv2i(rv).(map[uintptr]interface{}), e)
}
-func (_ fastpathT) EncMapUintptrIntfV(v map[uintptr]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrIntfV(v map[uintptr]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10353,43 +9588,36 @@ func (_ fastpathT) EncMapUintptrIntfV(v map[uintptr]interface{}, checkNil bool,
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[uintptr(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrStringR(rv reflect.Value) {
- fastpathTV.EncMapUintptrStringV(rv.Interface().(map[uintptr]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrStringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrStringV(rv2i(rv).(map[uintptr]string), e)
}
-func (_ fastpathT) EncMapUintptrStringV(v map[uintptr]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrStringV(v map[uintptr]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10399,43 +9627,36 @@ func (_ fastpathT) EncMapUintptrStringV(v map[uintptr]string, checkNil bool, e *
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v[uintptr(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrUintR(rv reflect.Value) {
- fastpathTV.EncMapUintptrUintV(rv.Interface().(map[uintptr]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrUintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrUintV(rv2i(rv).(map[uintptr]uint), e)
}
-func (_ fastpathT) EncMapUintptrUintV(v map[uintptr]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrUintV(v map[uintptr]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10445,43 +9666,36 @@ func (_ fastpathT) EncMapUintptrUintV(v map[uintptr]uint, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uintptr(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrUint8R(rv reflect.Value) {
- fastpathTV.EncMapUintptrUint8V(rv.Interface().(map[uintptr]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrUint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrUint8V(rv2i(rv).(map[uintptr]uint8), e)
}
-func (_ fastpathT) EncMapUintptrUint8V(v map[uintptr]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrUint8V(v map[uintptr]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10491,43 +9705,36 @@ func (_ fastpathT) EncMapUintptrUint8V(v map[uintptr]uint8, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uintptr(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrUint16R(rv reflect.Value) {
- fastpathTV.EncMapUintptrUint16V(rv.Interface().(map[uintptr]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrUint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrUint16V(rv2i(rv).(map[uintptr]uint16), e)
}
-func (_ fastpathT) EncMapUintptrUint16V(v map[uintptr]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrUint16V(v map[uintptr]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10537,43 +9744,36 @@ func (_ fastpathT) EncMapUintptrUint16V(v map[uintptr]uint16, checkNil bool, e *
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uintptr(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrUint32R(rv reflect.Value) {
- fastpathTV.EncMapUintptrUint32V(rv.Interface().(map[uintptr]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrUint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrUint32V(rv2i(rv).(map[uintptr]uint32), e)
}
-func (_ fastpathT) EncMapUintptrUint32V(v map[uintptr]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrUint32V(v map[uintptr]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10583,43 +9783,36 @@ func (_ fastpathT) EncMapUintptrUint32V(v map[uintptr]uint32, checkNil bool, e *
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uintptr(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrUint64R(rv reflect.Value) {
- fastpathTV.EncMapUintptrUint64V(rv.Interface().(map[uintptr]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrUint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrUint64V(rv2i(rv).(map[uintptr]uint64), e)
}
-func (_ fastpathT) EncMapUintptrUint64V(v map[uintptr]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrUint64V(v map[uintptr]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10629,43 +9822,36 @@ func (_ fastpathT) EncMapUintptrUint64V(v map[uintptr]uint64, checkNil bool, e *
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[uintptr(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrUintptrR(rv reflect.Value) {
- fastpathTV.EncMapUintptrUintptrV(rv.Interface().(map[uintptr]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrUintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrUintptrV(rv2i(rv).(map[uintptr]uintptr), e)
}
-func (_ fastpathT) EncMapUintptrUintptrV(v map[uintptr]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrUintptrV(v map[uintptr]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10675,43 +9861,36 @@ func (_ fastpathT) EncMapUintptrUintptrV(v map[uintptr]uintptr, checkNil bool, e
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[uintptr(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrIntR(rv reflect.Value) {
- fastpathTV.EncMapUintptrIntV(rv.Interface().(map[uintptr]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrIntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrIntV(rv2i(rv).(map[uintptr]int), e)
}
-func (_ fastpathT) EncMapUintptrIntV(v map[uintptr]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrIntV(v map[uintptr]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10721,43 +9900,36 @@ func (_ fastpathT) EncMapUintptrIntV(v map[uintptr]int, checkNil bool, e *Encode
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uintptr(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrInt8R(rv reflect.Value) {
- fastpathTV.EncMapUintptrInt8V(rv.Interface().(map[uintptr]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrInt8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrInt8V(rv2i(rv).(map[uintptr]int8), e)
}
-func (_ fastpathT) EncMapUintptrInt8V(v map[uintptr]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrInt8V(v map[uintptr]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10767,43 +9939,36 @@ func (_ fastpathT) EncMapUintptrInt8V(v map[uintptr]int8, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uintptr(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrInt16R(rv reflect.Value) {
- fastpathTV.EncMapUintptrInt16V(rv.Interface().(map[uintptr]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrInt16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrInt16V(rv2i(rv).(map[uintptr]int16), e)
}
-func (_ fastpathT) EncMapUintptrInt16V(v map[uintptr]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrInt16V(v map[uintptr]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10813,43 +9978,36 @@ func (_ fastpathT) EncMapUintptrInt16V(v map[uintptr]int16, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uintptr(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrInt32R(rv reflect.Value) {
- fastpathTV.EncMapUintptrInt32V(rv.Interface().(map[uintptr]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrInt32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrInt32V(rv2i(rv).(map[uintptr]int32), e)
}
-func (_ fastpathT) EncMapUintptrInt32V(v map[uintptr]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrInt32V(v map[uintptr]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10859,43 +10017,36 @@ func (_ fastpathT) EncMapUintptrInt32V(v map[uintptr]int32, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uintptr(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrInt64R(rv reflect.Value) {
- fastpathTV.EncMapUintptrInt64V(rv.Interface().(map[uintptr]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrInt64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrInt64V(rv2i(rv).(map[uintptr]int64), e)
}
-func (_ fastpathT) EncMapUintptrInt64V(v map[uintptr]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrInt64V(v map[uintptr]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10905,43 +10056,36 @@ func (_ fastpathT) EncMapUintptrInt64V(v map[uintptr]int64, checkNil bool, e *En
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[uintptr(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrFloat32R(rv reflect.Value) {
- fastpathTV.EncMapUintptrFloat32V(rv.Interface().(map[uintptr]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrFloat32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrFloat32V(rv2i(rv).(map[uintptr]float32), e)
}
-func (_ fastpathT) EncMapUintptrFloat32V(v map[uintptr]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrFloat32V(v map[uintptr]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10951,43 +10095,36 @@ func (_ fastpathT) EncMapUintptrFloat32V(v map[uintptr]float32, checkNil bool, e
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v[uintptr(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrFloat64R(rv reflect.Value) {
- fastpathTV.EncMapUintptrFloat64V(rv.Interface().(map[uintptr]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrFloat64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrFloat64V(rv2i(rv).(map[uintptr]float64), e)
}
-func (_ fastpathT) EncMapUintptrFloat64V(v map[uintptr]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrFloat64V(v map[uintptr]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -10997,43 +10134,36 @@ func (_ fastpathT) EncMapUintptrFloat64V(v map[uintptr]float64, checkNil bool, e
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v[uintptr(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapUintptrBoolR(rv reflect.Value) {
- fastpathTV.EncMapUintptrBoolV(rv.Interface().(map[uintptr]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapUintptrBoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapUintptrBoolV(rv2i(rv).(map[uintptr]bool), e)
}
-func (_ fastpathT) EncMapUintptrBoolV(v map[uintptr]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapUintptrBoolV(v map[uintptr]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]uint64, len(v))
var i int
@@ -11043,43 +10173,36 @@ func (_ fastpathT) EncMapUintptrBoolV(v map[uintptr]bool, checkNil bool, e *Enco
}
sort.Sort(uintSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(uintptr(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v[uintptr(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
e.encode(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntIntfR(rv reflect.Value) {
- fastpathTV.EncMapIntIntfV(rv.Interface().(map[int]interface{}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntIntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntIntfV(rv2i(rv).(map[int]interface{}), e)
}
-func (_ fastpathT) EncMapIntIntfV(v map[int]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntIntfV(v map[int]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11089,43 +10212,36 @@ func (_ fastpathT) EncMapIntIntfV(v map[int]interface{}, checkNil bool, e *Encod
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[int(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntStringR(rv reflect.Value) {
- fastpathTV.EncMapIntStringV(rv.Interface().(map[int]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntStringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntStringV(rv2i(rv).(map[int]string), e)
}
-func (_ fastpathT) EncMapIntStringV(v map[int]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntStringV(v map[int]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11135,43 +10251,36 @@ func (_ fastpathT) EncMapIntStringV(v map[int]string, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v[int(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntUintR(rv reflect.Value) {
- fastpathTV.EncMapIntUintV(rv.Interface().(map[int]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntUintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntUintV(rv2i(rv).(map[int]uint), e)
}
-func (_ fastpathT) EncMapIntUintV(v map[int]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntUintV(v map[int]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11181,43 +10290,36 @@ func (_ fastpathT) EncMapIntUintV(v map[int]uint, checkNil bool, e *Encoder) {
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntUint8R(rv reflect.Value) {
- fastpathTV.EncMapIntUint8V(rv.Interface().(map[int]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntUint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntUint8V(rv2i(rv).(map[int]uint8), e)
}
-func (_ fastpathT) EncMapIntUint8V(v map[int]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntUint8V(v map[int]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11227,43 +10329,36 @@ func (_ fastpathT) EncMapIntUint8V(v map[int]uint8, checkNil bool, e *Encoder) {
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntUint16R(rv reflect.Value) {
- fastpathTV.EncMapIntUint16V(rv.Interface().(map[int]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntUint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntUint16V(rv2i(rv).(map[int]uint16), e)
}
-func (_ fastpathT) EncMapIntUint16V(v map[int]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntUint16V(v map[int]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11273,43 +10368,36 @@ func (_ fastpathT) EncMapIntUint16V(v map[int]uint16, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntUint32R(rv reflect.Value) {
- fastpathTV.EncMapIntUint32V(rv.Interface().(map[int]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntUint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntUint32V(rv2i(rv).(map[int]uint32), e)
}
-func (_ fastpathT) EncMapIntUint32V(v map[int]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntUint32V(v map[int]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11319,43 +10407,36 @@ func (_ fastpathT) EncMapIntUint32V(v map[int]uint32, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntUint64R(rv reflect.Value) {
- fastpathTV.EncMapIntUint64V(rv.Interface().(map[int]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntUint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntUint64V(rv2i(rv).(map[int]uint64), e)
}
-func (_ fastpathT) EncMapIntUint64V(v map[int]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntUint64V(v map[int]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11365,43 +10446,36 @@ func (_ fastpathT) EncMapIntUint64V(v map[int]uint64, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntUintptrR(rv reflect.Value) {
- fastpathTV.EncMapIntUintptrV(rv.Interface().(map[int]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntUintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntUintptrV(rv2i(rv).(map[int]uintptr), e)
}
-func (_ fastpathT) EncMapIntUintptrV(v map[int]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntUintptrV(v map[int]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11411,43 +10485,36 @@ func (_ fastpathT) EncMapIntUintptrV(v map[int]uintptr, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[int(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntIntR(rv reflect.Value) {
- fastpathTV.EncMapIntIntV(rv.Interface().(map[int]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntIntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntIntV(rv2i(rv).(map[int]int), e)
}
-func (_ fastpathT) EncMapIntIntV(v map[int]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntIntV(v map[int]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11457,43 +10524,36 @@ func (_ fastpathT) EncMapIntIntV(v map[int]int, checkNil bool, e *Encoder) {
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntInt8R(rv reflect.Value) {
- fastpathTV.EncMapIntInt8V(rv.Interface().(map[int]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntInt8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntInt8V(rv2i(rv).(map[int]int8), e)
}
-func (_ fastpathT) EncMapIntInt8V(v map[int]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntInt8V(v map[int]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11503,43 +10563,36 @@ func (_ fastpathT) EncMapIntInt8V(v map[int]int8, checkNil bool, e *Encoder) {
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntInt16R(rv reflect.Value) {
- fastpathTV.EncMapIntInt16V(rv.Interface().(map[int]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntInt16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntInt16V(rv2i(rv).(map[int]int16), e)
}
-func (_ fastpathT) EncMapIntInt16V(v map[int]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntInt16V(v map[int]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11549,43 +10602,36 @@ func (_ fastpathT) EncMapIntInt16V(v map[int]int16, checkNil bool, e *Encoder) {
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntInt32R(rv reflect.Value) {
- fastpathTV.EncMapIntInt32V(rv.Interface().(map[int]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntInt32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntInt32V(rv2i(rv).(map[int]int32), e)
}
-func (_ fastpathT) EncMapIntInt32V(v map[int]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntInt32V(v map[int]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11595,43 +10641,36 @@ func (_ fastpathT) EncMapIntInt32V(v map[int]int32, checkNil bool, e *Encoder) {
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntInt64R(rv reflect.Value) {
- fastpathTV.EncMapIntInt64V(rv.Interface().(map[int]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntInt64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntInt64V(rv2i(rv).(map[int]int64), e)
}
-func (_ fastpathT) EncMapIntInt64V(v map[int]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntInt64V(v map[int]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11641,43 +10680,36 @@ func (_ fastpathT) EncMapIntInt64V(v map[int]int64, checkNil bool, e *Encoder) {
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntFloat32R(rv reflect.Value) {
- fastpathTV.EncMapIntFloat32V(rv.Interface().(map[int]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntFloat32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntFloat32V(rv2i(rv).(map[int]float32), e)
}
-func (_ fastpathT) EncMapIntFloat32V(v map[int]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntFloat32V(v map[int]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11687,43 +10719,36 @@ func (_ fastpathT) EncMapIntFloat32V(v map[int]float32, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v[int(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntFloat64R(rv reflect.Value) {
- fastpathTV.EncMapIntFloat64V(rv.Interface().(map[int]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntFloat64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntFloat64V(rv2i(rv).(map[int]float64), e)
}
-func (_ fastpathT) EncMapIntFloat64V(v map[int]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntFloat64V(v map[int]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11733,43 +10758,36 @@ func (_ fastpathT) EncMapIntFloat64V(v map[int]float64, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v[int(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapIntBoolR(rv reflect.Value) {
- fastpathTV.EncMapIntBoolV(rv.Interface().(map[int]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapIntBoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapIntBoolV(rv2i(rv).(map[int]bool), e)
}
-func (_ fastpathT) EncMapIntBoolV(v map[int]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapIntBoolV(v map[int]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11779,43 +10797,36 @@ func (_ fastpathT) EncMapIntBoolV(v map[int]bool, checkNil bool, e *Encoder) {
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v[int(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8IntfR(rv reflect.Value) {
- fastpathTV.EncMapInt8IntfV(rv.Interface().(map[int8]interface{}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8IntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8IntfV(rv2i(rv).(map[int8]interface{}), e)
}
-func (_ fastpathT) EncMapInt8IntfV(v map[int8]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8IntfV(v map[int8]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11825,43 +10836,36 @@ func (_ fastpathT) EncMapInt8IntfV(v map[int8]interface{}, checkNil bool, e *Enc
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[int8(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8StringR(rv reflect.Value) {
- fastpathTV.EncMapInt8StringV(rv.Interface().(map[int8]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8StringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8StringV(rv2i(rv).(map[int8]string), e)
}
-func (_ fastpathT) EncMapInt8StringV(v map[int8]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8StringV(v map[int8]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11871,43 +10875,36 @@ func (_ fastpathT) EncMapInt8StringV(v map[int8]string, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v[int8(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8UintR(rv reflect.Value) {
- fastpathTV.EncMapInt8UintV(rv.Interface().(map[int8]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8UintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8UintV(rv2i(rv).(map[int8]uint), e)
}
-func (_ fastpathT) EncMapInt8UintV(v map[int8]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8UintV(v map[int8]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11917,43 +10914,36 @@ func (_ fastpathT) EncMapInt8UintV(v map[int8]uint, checkNil bool, e *Encoder) {
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8Uint8R(rv reflect.Value) {
- fastpathTV.EncMapInt8Uint8V(rv.Interface().(map[int8]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8Uint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8Uint8V(rv2i(rv).(map[int8]uint8), e)
}
-func (_ fastpathT) EncMapInt8Uint8V(v map[int8]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8Uint8V(v map[int8]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -11963,43 +10953,36 @@ func (_ fastpathT) EncMapInt8Uint8V(v map[int8]uint8, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8Uint16R(rv reflect.Value) {
- fastpathTV.EncMapInt8Uint16V(rv.Interface().(map[int8]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8Uint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8Uint16V(rv2i(rv).(map[int8]uint16), e)
}
-func (_ fastpathT) EncMapInt8Uint16V(v map[int8]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8Uint16V(v map[int8]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12009,43 +10992,36 @@ func (_ fastpathT) EncMapInt8Uint16V(v map[int8]uint16, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8Uint32R(rv reflect.Value) {
- fastpathTV.EncMapInt8Uint32V(rv.Interface().(map[int8]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8Uint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8Uint32V(rv2i(rv).(map[int8]uint32), e)
}
-func (_ fastpathT) EncMapInt8Uint32V(v map[int8]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8Uint32V(v map[int8]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12055,43 +11031,36 @@ func (_ fastpathT) EncMapInt8Uint32V(v map[int8]uint32, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8Uint64R(rv reflect.Value) {
- fastpathTV.EncMapInt8Uint64V(rv.Interface().(map[int8]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8Uint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8Uint64V(rv2i(rv).(map[int8]uint64), e)
}
-func (_ fastpathT) EncMapInt8Uint64V(v map[int8]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8Uint64V(v map[int8]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12101,43 +11070,36 @@ func (_ fastpathT) EncMapInt8Uint64V(v map[int8]uint64, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8UintptrR(rv reflect.Value) {
- fastpathTV.EncMapInt8UintptrV(rv.Interface().(map[int8]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8UintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8UintptrV(rv2i(rv).(map[int8]uintptr), e)
}
-func (_ fastpathT) EncMapInt8UintptrV(v map[int8]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8UintptrV(v map[int8]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12147,43 +11109,36 @@ func (_ fastpathT) EncMapInt8UintptrV(v map[int8]uintptr, checkNil bool, e *Enco
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[int8(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8IntR(rv reflect.Value) {
- fastpathTV.EncMapInt8IntV(rv.Interface().(map[int8]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8IntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8IntV(rv2i(rv).(map[int8]int), e)
}
-func (_ fastpathT) EncMapInt8IntV(v map[int8]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8IntV(v map[int8]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12193,43 +11148,36 @@ func (_ fastpathT) EncMapInt8IntV(v map[int8]int, checkNil bool, e *Encoder) {
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8Int8R(rv reflect.Value) {
- fastpathTV.EncMapInt8Int8V(rv.Interface().(map[int8]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8Int8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8Int8V(rv2i(rv).(map[int8]int8), e)
}
-func (_ fastpathT) EncMapInt8Int8V(v map[int8]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8Int8V(v map[int8]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12239,43 +11187,36 @@ func (_ fastpathT) EncMapInt8Int8V(v map[int8]int8, checkNil bool, e *Encoder) {
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8Int16R(rv reflect.Value) {
- fastpathTV.EncMapInt8Int16V(rv.Interface().(map[int8]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8Int16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8Int16V(rv2i(rv).(map[int8]int16), e)
}
-func (_ fastpathT) EncMapInt8Int16V(v map[int8]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8Int16V(v map[int8]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12285,43 +11226,36 @@ func (_ fastpathT) EncMapInt8Int16V(v map[int8]int16, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8Int32R(rv reflect.Value) {
- fastpathTV.EncMapInt8Int32V(rv.Interface().(map[int8]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8Int32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8Int32V(rv2i(rv).(map[int8]int32), e)
}
-func (_ fastpathT) EncMapInt8Int32V(v map[int8]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8Int32V(v map[int8]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12331,43 +11265,36 @@ func (_ fastpathT) EncMapInt8Int32V(v map[int8]int32, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8Int64R(rv reflect.Value) {
- fastpathTV.EncMapInt8Int64V(rv.Interface().(map[int8]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8Int64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8Int64V(rv2i(rv).(map[int8]int64), e)
}
-func (_ fastpathT) EncMapInt8Int64V(v map[int8]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8Int64V(v map[int8]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12377,43 +11304,36 @@ func (_ fastpathT) EncMapInt8Int64V(v map[int8]int64, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int8(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8Float32R(rv reflect.Value) {
- fastpathTV.EncMapInt8Float32V(rv.Interface().(map[int8]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8Float32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8Float32V(rv2i(rv).(map[int8]float32), e)
}
-func (_ fastpathT) EncMapInt8Float32V(v map[int8]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8Float32V(v map[int8]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12423,43 +11343,36 @@ func (_ fastpathT) EncMapInt8Float32V(v map[int8]float32, checkNil bool, e *Enco
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v[int8(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8Float64R(rv reflect.Value) {
- fastpathTV.EncMapInt8Float64V(rv.Interface().(map[int8]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8Float64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8Float64V(rv2i(rv).(map[int8]float64), e)
}
-func (_ fastpathT) EncMapInt8Float64V(v map[int8]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8Float64V(v map[int8]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12469,43 +11382,36 @@ func (_ fastpathT) EncMapInt8Float64V(v map[int8]float64, checkNil bool, e *Enco
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v[int8(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt8BoolR(rv reflect.Value) {
- fastpathTV.EncMapInt8BoolV(rv.Interface().(map[int8]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt8BoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt8BoolV(rv2i(rv).(map[int8]bool), e)
}
-func (_ fastpathT) EncMapInt8BoolV(v map[int8]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt8BoolV(v map[int8]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12515,43 +11421,36 @@ func (_ fastpathT) EncMapInt8BoolV(v map[int8]bool, checkNil bool, e *Encoder) {
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int8(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v[int8(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16IntfR(rv reflect.Value) {
- fastpathTV.EncMapInt16IntfV(rv.Interface().(map[int16]interface{}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16IntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16IntfV(rv2i(rv).(map[int16]interface{}), e)
}
-func (_ fastpathT) EncMapInt16IntfV(v map[int16]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16IntfV(v map[int16]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12561,43 +11460,36 @@ func (_ fastpathT) EncMapInt16IntfV(v map[int16]interface{}, checkNil bool, e *E
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[int16(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16StringR(rv reflect.Value) {
- fastpathTV.EncMapInt16StringV(rv.Interface().(map[int16]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16StringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16StringV(rv2i(rv).(map[int16]string), e)
}
-func (_ fastpathT) EncMapInt16StringV(v map[int16]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16StringV(v map[int16]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12607,43 +11499,36 @@ func (_ fastpathT) EncMapInt16StringV(v map[int16]string, checkNil bool, e *Enco
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v[int16(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16UintR(rv reflect.Value) {
- fastpathTV.EncMapInt16UintV(rv.Interface().(map[int16]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16UintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16UintV(rv2i(rv).(map[int16]uint), e)
}
-func (_ fastpathT) EncMapInt16UintV(v map[int16]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16UintV(v map[int16]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12653,43 +11538,36 @@ func (_ fastpathT) EncMapInt16UintV(v map[int16]uint, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16Uint8R(rv reflect.Value) {
- fastpathTV.EncMapInt16Uint8V(rv.Interface().(map[int16]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16Uint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16Uint8V(rv2i(rv).(map[int16]uint8), e)
}
-func (_ fastpathT) EncMapInt16Uint8V(v map[int16]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16Uint8V(v map[int16]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12699,43 +11577,36 @@ func (_ fastpathT) EncMapInt16Uint8V(v map[int16]uint8, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16Uint16R(rv reflect.Value) {
- fastpathTV.EncMapInt16Uint16V(rv.Interface().(map[int16]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16Uint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16Uint16V(rv2i(rv).(map[int16]uint16), e)
}
-func (_ fastpathT) EncMapInt16Uint16V(v map[int16]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16Uint16V(v map[int16]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12745,43 +11616,36 @@ func (_ fastpathT) EncMapInt16Uint16V(v map[int16]uint16, checkNil bool, e *Enco
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16Uint32R(rv reflect.Value) {
- fastpathTV.EncMapInt16Uint32V(rv.Interface().(map[int16]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16Uint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16Uint32V(rv2i(rv).(map[int16]uint32), e)
}
-func (_ fastpathT) EncMapInt16Uint32V(v map[int16]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16Uint32V(v map[int16]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12791,43 +11655,36 @@ func (_ fastpathT) EncMapInt16Uint32V(v map[int16]uint32, checkNil bool, e *Enco
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16Uint64R(rv reflect.Value) {
- fastpathTV.EncMapInt16Uint64V(rv.Interface().(map[int16]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16Uint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16Uint64V(rv2i(rv).(map[int16]uint64), e)
}
-func (_ fastpathT) EncMapInt16Uint64V(v map[int16]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16Uint64V(v map[int16]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12837,43 +11694,36 @@ func (_ fastpathT) EncMapInt16Uint64V(v map[int16]uint64, checkNil bool, e *Enco
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16UintptrR(rv reflect.Value) {
- fastpathTV.EncMapInt16UintptrV(rv.Interface().(map[int16]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16UintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16UintptrV(rv2i(rv).(map[int16]uintptr), e)
}
-func (_ fastpathT) EncMapInt16UintptrV(v map[int16]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16UintptrV(v map[int16]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12883,43 +11733,36 @@ func (_ fastpathT) EncMapInt16UintptrV(v map[int16]uintptr, checkNil bool, e *En
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[int16(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16IntR(rv reflect.Value) {
- fastpathTV.EncMapInt16IntV(rv.Interface().(map[int16]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16IntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16IntV(rv2i(rv).(map[int16]int), e)
}
-func (_ fastpathT) EncMapInt16IntV(v map[int16]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16IntV(v map[int16]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12929,43 +11772,36 @@ func (_ fastpathT) EncMapInt16IntV(v map[int16]int, checkNil bool, e *Encoder) {
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16Int8R(rv reflect.Value) {
- fastpathTV.EncMapInt16Int8V(rv.Interface().(map[int16]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16Int8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16Int8V(rv2i(rv).(map[int16]int8), e)
}
-func (_ fastpathT) EncMapInt16Int8V(v map[int16]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16Int8V(v map[int16]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -12975,43 +11811,36 @@ func (_ fastpathT) EncMapInt16Int8V(v map[int16]int8, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16Int16R(rv reflect.Value) {
- fastpathTV.EncMapInt16Int16V(rv.Interface().(map[int16]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16Int16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16Int16V(rv2i(rv).(map[int16]int16), e)
}
-func (_ fastpathT) EncMapInt16Int16V(v map[int16]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16Int16V(v map[int16]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13021,43 +11850,36 @@ func (_ fastpathT) EncMapInt16Int16V(v map[int16]int16, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16Int32R(rv reflect.Value) {
- fastpathTV.EncMapInt16Int32V(rv.Interface().(map[int16]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16Int32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16Int32V(rv2i(rv).(map[int16]int32), e)
}
-func (_ fastpathT) EncMapInt16Int32V(v map[int16]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16Int32V(v map[int16]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13067,43 +11889,36 @@ func (_ fastpathT) EncMapInt16Int32V(v map[int16]int32, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16Int64R(rv reflect.Value) {
- fastpathTV.EncMapInt16Int64V(rv.Interface().(map[int16]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16Int64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16Int64V(rv2i(rv).(map[int16]int64), e)
}
-func (_ fastpathT) EncMapInt16Int64V(v map[int16]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16Int64V(v map[int16]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13113,43 +11928,36 @@ func (_ fastpathT) EncMapInt16Int64V(v map[int16]int64, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int16(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16Float32R(rv reflect.Value) {
- fastpathTV.EncMapInt16Float32V(rv.Interface().(map[int16]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16Float32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16Float32V(rv2i(rv).(map[int16]float32), e)
}
-func (_ fastpathT) EncMapInt16Float32V(v map[int16]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16Float32V(v map[int16]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13159,43 +11967,36 @@ func (_ fastpathT) EncMapInt16Float32V(v map[int16]float32, checkNil bool, e *En
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v[int16(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16Float64R(rv reflect.Value) {
- fastpathTV.EncMapInt16Float64V(rv.Interface().(map[int16]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16Float64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16Float64V(rv2i(rv).(map[int16]float64), e)
}
-func (_ fastpathT) EncMapInt16Float64V(v map[int16]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16Float64V(v map[int16]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13205,43 +12006,36 @@ func (_ fastpathT) EncMapInt16Float64V(v map[int16]float64, checkNil bool, e *En
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v[int16(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt16BoolR(rv reflect.Value) {
- fastpathTV.EncMapInt16BoolV(rv.Interface().(map[int16]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt16BoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt16BoolV(rv2i(rv).(map[int16]bool), e)
}
-func (_ fastpathT) EncMapInt16BoolV(v map[int16]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt16BoolV(v map[int16]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13251,43 +12045,36 @@ func (_ fastpathT) EncMapInt16BoolV(v map[int16]bool, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int16(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v[int16(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32IntfR(rv reflect.Value) {
- fastpathTV.EncMapInt32IntfV(rv.Interface().(map[int32]interface{}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32IntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32IntfV(rv2i(rv).(map[int32]interface{}), e)
}
-func (_ fastpathT) EncMapInt32IntfV(v map[int32]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32IntfV(v map[int32]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13297,43 +12084,36 @@ func (_ fastpathT) EncMapInt32IntfV(v map[int32]interface{}, checkNil bool, e *E
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[int32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32StringR(rv reflect.Value) {
- fastpathTV.EncMapInt32StringV(rv.Interface().(map[int32]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32StringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32StringV(rv2i(rv).(map[int32]string), e)
}
-func (_ fastpathT) EncMapInt32StringV(v map[int32]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32StringV(v map[int32]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13343,43 +12123,36 @@ func (_ fastpathT) EncMapInt32StringV(v map[int32]string, checkNil bool, e *Enco
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v[int32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32UintR(rv reflect.Value) {
- fastpathTV.EncMapInt32UintV(rv.Interface().(map[int32]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32UintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32UintV(rv2i(rv).(map[int32]uint), e)
}
-func (_ fastpathT) EncMapInt32UintV(v map[int32]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32UintV(v map[int32]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13389,43 +12162,36 @@ func (_ fastpathT) EncMapInt32UintV(v map[int32]uint, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32Uint8R(rv reflect.Value) {
- fastpathTV.EncMapInt32Uint8V(rv.Interface().(map[int32]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32Uint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32Uint8V(rv2i(rv).(map[int32]uint8), e)
}
-func (_ fastpathT) EncMapInt32Uint8V(v map[int32]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32Uint8V(v map[int32]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13435,43 +12201,36 @@ func (_ fastpathT) EncMapInt32Uint8V(v map[int32]uint8, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32Uint16R(rv reflect.Value) {
- fastpathTV.EncMapInt32Uint16V(rv.Interface().(map[int32]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32Uint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32Uint16V(rv2i(rv).(map[int32]uint16), e)
}
-func (_ fastpathT) EncMapInt32Uint16V(v map[int32]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32Uint16V(v map[int32]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13481,43 +12240,36 @@ func (_ fastpathT) EncMapInt32Uint16V(v map[int32]uint16, checkNil bool, e *Enco
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32Uint32R(rv reflect.Value) {
- fastpathTV.EncMapInt32Uint32V(rv.Interface().(map[int32]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32Uint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32Uint32V(rv2i(rv).(map[int32]uint32), e)
}
-func (_ fastpathT) EncMapInt32Uint32V(v map[int32]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32Uint32V(v map[int32]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13527,43 +12279,36 @@ func (_ fastpathT) EncMapInt32Uint32V(v map[int32]uint32, checkNil bool, e *Enco
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32Uint64R(rv reflect.Value) {
- fastpathTV.EncMapInt32Uint64V(rv.Interface().(map[int32]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32Uint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32Uint64V(rv2i(rv).(map[int32]uint64), e)
}
-func (_ fastpathT) EncMapInt32Uint64V(v map[int32]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32Uint64V(v map[int32]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13573,43 +12318,36 @@ func (_ fastpathT) EncMapInt32Uint64V(v map[int32]uint64, checkNil bool, e *Enco
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32UintptrR(rv reflect.Value) {
- fastpathTV.EncMapInt32UintptrV(rv.Interface().(map[int32]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32UintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32UintptrV(rv2i(rv).(map[int32]uintptr), e)
}
-func (_ fastpathT) EncMapInt32UintptrV(v map[int32]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32UintptrV(v map[int32]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13619,43 +12357,36 @@ func (_ fastpathT) EncMapInt32UintptrV(v map[int32]uintptr, checkNil bool, e *En
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[int32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32IntR(rv reflect.Value) {
- fastpathTV.EncMapInt32IntV(rv.Interface().(map[int32]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32IntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32IntV(rv2i(rv).(map[int32]int), e)
}
-func (_ fastpathT) EncMapInt32IntV(v map[int32]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32IntV(v map[int32]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13665,43 +12396,36 @@ func (_ fastpathT) EncMapInt32IntV(v map[int32]int, checkNil bool, e *Encoder) {
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32Int8R(rv reflect.Value) {
- fastpathTV.EncMapInt32Int8V(rv.Interface().(map[int32]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32Int8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32Int8V(rv2i(rv).(map[int32]int8), e)
}
-func (_ fastpathT) EncMapInt32Int8V(v map[int32]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32Int8V(v map[int32]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13711,43 +12435,36 @@ func (_ fastpathT) EncMapInt32Int8V(v map[int32]int8, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32Int16R(rv reflect.Value) {
- fastpathTV.EncMapInt32Int16V(rv.Interface().(map[int32]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32Int16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32Int16V(rv2i(rv).(map[int32]int16), e)
}
-func (_ fastpathT) EncMapInt32Int16V(v map[int32]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32Int16V(v map[int32]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13757,43 +12474,36 @@ func (_ fastpathT) EncMapInt32Int16V(v map[int32]int16, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32Int32R(rv reflect.Value) {
- fastpathTV.EncMapInt32Int32V(rv.Interface().(map[int32]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32Int32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32Int32V(rv2i(rv).(map[int32]int32), e)
}
-func (_ fastpathT) EncMapInt32Int32V(v map[int32]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32Int32V(v map[int32]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13803,43 +12513,36 @@ func (_ fastpathT) EncMapInt32Int32V(v map[int32]int32, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32Int64R(rv reflect.Value) {
- fastpathTV.EncMapInt32Int64V(rv.Interface().(map[int32]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32Int64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32Int64V(rv2i(rv).(map[int32]int64), e)
}
-func (_ fastpathT) EncMapInt32Int64V(v map[int32]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32Int64V(v map[int32]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13849,43 +12552,36 @@ func (_ fastpathT) EncMapInt32Int64V(v map[int32]int64, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int32(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32Float32R(rv reflect.Value) {
- fastpathTV.EncMapInt32Float32V(rv.Interface().(map[int32]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32Float32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32Float32V(rv2i(rv).(map[int32]float32), e)
}
-func (_ fastpathT) EncMapInt32Float32V(v map[int32]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32Float32V(v map[int32]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13895,43 +12591,36 @@ func (_ fastpathT) EncMapInt32Float32V(v map[int32]float32, checkNil bool, e *En
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v[int32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32Float64R(rv reflect.Value) {
- fastpathTV.EncMapInt32Float64V(rv.Interface().(map[int32]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32Float64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32Float64V(rv2i(rv).(map[int32]float64), e)
}
-func (_ fastpathT) EncMapInt32Float64V(v map[int32]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32Float64V(v map[int32]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13941,43 +12630,36 @@ func (_ fastpathT) EncMapInt32Float64V(v map[int32]float64, checkNil bool, e *En
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v[int32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt32BoolR(rv reflect.Value) {
- fastpathTV.EncMapInt32BoolV(rv.Interface().(map[int32]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt32BoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt32BoolV(rv2i(rv).(map[int32]bool), e)
}
-func (_ fastpathT) EncMapInt32BoolV(v map[int32]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt32BoolV(v map[int32]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -13987,43 +12669,36 @@ func (_ fastpathT) EncMapInt32BoolV(v map[int32]bool, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int32(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v[int32(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64IntfR(rv reflect.Value) {
- fastpathTV.EncMapInt64IntfV(rv.Interface().(map[int64]interface{}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64IntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64IntfV(rv2i(rv).(map[int64]interface{}), e)
}
-func (_ fastpathT) EncMapInt64IntfV(v map[int64]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64IntfV(v map[int64]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14033,43 +12708,36 @@ func (_ fastpathT) EncMapInt64IntfV(v map[int64]interface{}, checkNil bool, e *E
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[int64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64StringR(rv reflect.Value) {
- fastpathTV.EncMapInt64StringV(rv.Interface().(map[int64]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64StringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64StringV(rv2i(rv).(map[int64]string), e)
}
-func (_ fastpathT) EncMapInt64StringV(v map[int64]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64StringV(v map[int64]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14079,43 +12747,36 @@ func (_ fastpathT) EncMapInt64StringV(v map[int64]string, checkNil bool, e *Enco
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v[int64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64UintR(rv reflect.Value) {
- fastpathTV.EncMapInt64UintV(rv.Interface().(map[int64]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64UintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64UintV(rv2i(rv).(map[int64]uint), e)
}
-func (_ fastpathT) EncMapInt64UintV(v map[int64]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64UintV(v map[int64]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14125,43 +12786,36 @@ func (_ fastpathT) EncMapInt64UintV(v map[int64]uint, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64Uint8R(rv reflect.Value) {
- fastpathTV.EncMapInt64Uint8V(rv.Interface().(map[int64]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64Uint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64Uint8V(rv2i(rv).(map[int64]uint8), e)
}
-func (_ fastpathT) EncMapInt64Uint8V(v map[int64]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64Uint8V(v map[int64]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14171,43 +12825,36 @@ func (_ fastpathT) EncMapInt64Uint8V(v map[int64]uint8, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64Uint16R(rv reflect.Value) {
- fastpathTV.EncMapInt64Uint16V(rv.Interface().(map[int64]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64Uint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64Uint16V(rv2i(rv).(map[int64]uint16), e)
}
-func (_ fastpathT) EncMapInt64Uint16V(v map[int64]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64Uint16V(v map[int64]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14217,43 +12864,36 @@ func (_ fastpathT) EncMapInt64Uint16V(v map[int64]uint16, checkNil bool, e *Enco
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64Uint32R(rv reflect.Value) {
- fastpathTV.EncMapInt64Uint32V(rv.Interface().(map[int64]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64Uint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64Uint32V(rv2i(rv).(map[int64]uint32), e)
}
-func (_ fastpathT) EncMapInt64Uint32V(v map[int64]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64Uint32V(v map[int64]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14263,43 +12903,36 @@ func (_ fastpathT) EncMapInt64Uint32V(v map[int64]uint32, checkNil bool, e *Enco
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64Uint64R(rv reflect.Value) {
- fastpathTV.EncMapInt64Uint64V(rv.Interface().(map[int64]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64Uint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64Uint64V(rv2i(rv).(map[int64]uint64), e)
}
-func (_ fastpathT) EncMapInt64Uint64V(v map[int64]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64Uint64V(v map[int64]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14309,43 +12942,36 @@ func (_ fastpathT) EncMapInt64Uint64V(v map[int64]uint64, checkNil bool, e *Enco
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[int64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64UintptrR(rv reflect.Value) {
- fastpathTV.EncMapInt64UintptrV(rv.Interface().(map[int64]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64UintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64UintptrV(rv2i(rv).(map[int64]uintptr), e)
}
-func (_ fastpathT) EncMapInt64UintptrV(v map[int64]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64UintptrV(v map[int64]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14355,43 +12981,36 @@ func (_ fastpathT) EncMapInt64UintptrV(v map[int64]uintptr, checkNil bool, e *En
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[int64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64IntR(rv reflect.Value) {
- fastpathTV.EncMapInt64IntV(rv.Interface().(map[int64]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64IntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64IntV(rv2i(rv).(map[int64]int), e)
}
-func (_ fastpathT) EncMapInt64IntV(v map[int64]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64IntV(v map[int64]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14401,43 +13020,36 @@ func (_ fastpathT) EncMapInt64IntV(v map[int64]int, checkNil bool, e *Encoder) {
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64Int8R(rv reflect.Value) {
- fastpathTV.EncMapInt64Int8V(rv.Interface().(map[int64]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64Int8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64Int8V(rv2i(rv).(map[int64]int8), e)
}
-func (_ fastpathT) EncMapInt64Int8V(v map[int64]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64Int8V(v map[int64]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14447,43 +13059,36 @@ func (_ fastpathT) EncMapInt64Int8V(v map[int64]int8, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64Int16R(rv reflect.Value) {
- fastpathTV.EncMapInt64Int16V(rv.Interface().(map[int64]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64Int16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64Int16V(rv2i(rv).(map[int64]int16), e)
}
-func (_ fastpathT) EncMapInt64Int16V(v map[int64]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64Int16V(v map[int64]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14493,43 +13098,36 @@ func (_ fastpathT) EncMapInt64Int16V(v map[int64]int16, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64Int32R(rv reflect.Value) {
- fastpathTV.EncMapInt64Int32V(rv.Interface().(map[int64]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64Int32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64Int32V(rv2i(rv).(map[int64]int32), e)
}
-func (_ fastpathT) EncMapInt64Int32V(v map[int64]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64Int32V(v map[int64]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14539,43 +13137,36 @@ func (_ fastpathT) EncMapInt64Int32V(v map[int64]int32, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64Int64R(rv reflect.Value) {
- fastpathTV.EncMapInt64Int64V(rv.Interface().(map[int64]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64Int64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64Int64V(rv2i(rv).(map[int64]int64), e)
}
-func (_ fastpathT) EncMapInt64Int64V(v map[int64]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64Int64V(v map[int64]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14585,43 +13176,36 @@ func (_ fastpathT) EncMapInt64Int64V(v map[int64]int64, checkNil bool, e *Encode
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[int64(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64Float32R(rv reflect.Value) {
- fastpathTV.EncMapInt64Float32V(rv.Interface().(map[int64]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64Float32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64Float32V(rv2i(rv).(map[int64]float32), e)
}
-func (_ fastpathT) EncMapInt64Float32V(v map[int64]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64Float32V(v map[int64]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14631,43 +13215,36 @@ func (_ fastpathT) EncMapInt64Float32V(v map[int64]float32, checkNil bool, e *En
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v[int64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64Float64R(rv reflect.Value) {
- fastpathTV.EncMapInt64Float64V(rv.Interface().(map[int64]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64Float64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64Float64V(rv2i(rv).(map[int64]float64), e)
}
-func (_ fastpathT) EncMapInt64Float64V(v map[int64]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64Float64V(v map[int64]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14677,43 +13254,36 @@ func (_ fastpathT) EncMapInt64Float64V(v map[int64]float64, checkNil bool, e *En
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v[int64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapInt64BoolR(rv reflect.Value) {
- fastpathTV.EncMapInt64BoolV(rv.Interface().(map[int64]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapInt64BoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapInt64BoolV(rv2i(rv).(map[int64]bool), e)
}
-func (_ fastpathT) EncMapInt64BoolV(v map[int64]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapInt64BoolV(v map[int64]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]int64, len(v))
var i int
@@ -14723,43 +13293,36 @@ func (_ fastpathT) EncMapInt64BoolV(v map[int64]bool, checkNil bool, e *Encoder)
}
sort.Sort(intSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(int64(k2)))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v[int64(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeInt(int64(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolIntfR(rv reflect.Value) {
- fastpathTV.EncMapBoolIntfV(rv.Interface().(map[bool]interface{}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolIntfR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolIntfV(rv2i(rv).(map[bool]interface{}), e)
}
-func (_ fastpathT) EncMapBoolIntfV(v map[bool]interface{}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolIntfV(v map[bool]interface{}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -14769,43 +13332,36 @@ func (_ fastpathT) EncMapBoolIntfV(v map[bool]interface{}, checkNil bool, e *Enc
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[bool(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolStringR(rv reflect.Value) {
- fastpathTV.EncMapBoolStringV(rv.Interface().(map[bool]string), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolStringR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolStringV(rv2i(rv).(map[bool]string), e)
}
-func (_ fastpathT) EncMapBoolStringV(v map[bool]string, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolStringV(v map[bool]string, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -14815,43 +13371,36 @@ func (_ fastpathT) EncMapBoolStringV(v map[bool]string, checkNil bool, e *Encode
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v[bool(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeString(c_UTF8, v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolUintR(rv reflect.Value) {
- fastpathTV.EncMapBoolUintV(rv.Interface().(map[bool]uint), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolUintR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolUintV(rv2i(rv).(map[bool]uint), e)
}
-func (_ fastpathT) EncMapBoolUintV(v map[bool]uint, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolUintV(v map[bool]uint, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -14861,43 +13410,36 @@ func (_ fastpathT) EncMapBoolUintV(v map[bool]uint, checkNil bool, e *Encoder) {
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[bool(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolUint8R(rv reflect.Value) {
- fastpathTV.EncMapBoolUint8V(rv.Interface().(map[bool]uint8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolUint8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolUint8V(rv2i(rv).(map[bool]uint8), e)
}
-func (_ fastpathT) EncMapBoolUint8V(v map[bool]uint8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolUint8V(v map[bool]uint8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -14907,43 +13449,36 @@ func (_ fastpathT) EncMapBoolUint8V(v map[bool]uint8, checkNil bool, e *Encoder)
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[bool(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolUint16R(rv reflect.Value) {
- fastpathTV.EncMapBoolUint16V(rv.Interface().(map[bool]uint16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolUint16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolUint16V(rv2i(rv).(map[bool]uint16), e)
}
-func (_ fastpathT) EncMapBoolUint16V(v map[bool]uint16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolUint16V(v map[bool]uint16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -14953,43 +13488,36 @@ func (_ fastpathT) EncMapBoolUint16V(v map[bool]uint16, checkNil bool, e *Encode
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[bool(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolUint32R(rv reflect.Value) {
- fastpathTV.EncMapBoolUint32V(rv.Interface().(map[bool]uint32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolUint32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolUint32V(rv2i(rv).(map[bool]uint32), e)
}
-func (_ fastpathT) EncMapBoolUint32V(v map[bool]uint32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolUint32V(v map[bool]uint32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -14999,43 +13527,36 @@ func (_ fastpathT) EncMapBoolUint32V(v map[bool]uint32, checkNil bool, e *Encode
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[bool(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolUint64R(rv reflect.Value) {
- fastpathTV.EncMapBoolUint64V(rv.Interface().(map[bool]uint64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolUint64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolUint64V(rv2i(rv).(map[bool]uint64), e)
}
-func (_ fastpathT) EncMapBoolUint64V(v map[bool]uint64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolUint64V(v map[bool]uint64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -15045,43 +13566,36 @@ func (_ fastpathT) EncMapBoolUint64V(v map[bool]uint64, checkNil bool, e *Encode
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v[bool(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeUint(uint64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolUintptrR(rv reflect.Value) {
- fastpathTV.EncMapBoolUintptrV(rv.Interface().(map[bool]uintptr), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolUintptrR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolUintptrV(rv2i(rv).(map[bool]uintptr), e)
}
-func (_ fastpathT) EncMapBoolUintptrV(v map[bool]uintptr, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolUintptrV(v map[bool]uintptr, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -15091,43 +13605,36 @@ func (_ fastpathT) EncMapBoolUintptrV(v map[bool]uintptr, checkNil bool, e *Enco
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v[bool(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
e.encode(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolIntR(rv reflect.Value) {
- fastpathTV.EncMapBoolIntV(rv.Interface().(map[bool]int), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolIntR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolIntV(rv2i(rv).(map[bool]int), e)
}
-func (_ fastpathT) EncMapBoolIntV(v map[bool]int, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolIntV(v map[bool]int, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -15137,43 +13644,36 @@ func (_ fastpathT) EncMapBoolIntV(v map[bool]int, checkNil bool, e *Encoder) {
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[bool(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolInt8R(rv reflect.Value) {
- fastpathTV.EncMapBoolInt8V(rv.Interface().(map[bool]int8), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolInt8R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolInt8V(rv2i(rv).(map[bool]int8), e)
}
-func (_ fastpathT) EncMapBoolInt8V(v map[bool]int8, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolInt8V(v map[bool]int8, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -15183,43 +13683,36 @@ func (_ fastpathT) EncMapBoolInt8V(v map[bool]int8, checkNil bool, e *Encoder) {
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[bool(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolInt16R(rv reflect.Value) {
- fastpathTV.EncMapBoolInt16V(rv.Interface().(map[bool]int16), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolInt16R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolInt16V(rv2i(rv).(map[bool]int16), e)
}
-func (_ fastpathT) EncMapBoolInt16V(v map[bool]int16, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolInt16V(v map[bool]int16, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -15229,43 +13722,36 @@ func (_ fastpathT) EncMapBoolInt16V(v map[bool]int16, checkNil bool, e *Encoder)
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[bool(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolInt32R(rv reflect.Value) {
- fastpathTV.EncMapBoolInt32V(rv.Interface().(map[bool]int32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolInt32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolInt32V(rv2i(rv).(map[bool]int32), e)
}
-func (_ fastpathT) EncMapBoolInt32V(v map[bool]int32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolInt32V(v map[bool]int32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -15275,43 +13761,36 @@ func (_ fastpathT) EncMapBoolInt32V(v map[bool]int32, checkNil bool, e *Encoder)
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[bool(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolInt64R(rv reflect.Value) {
- fastpathTV.EncMapBoolInt64V(rv.Interface().(map[bool]int64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolInt64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolInt64V(rv2i(rv).(map[bool]int64), e)
}
-func (_ fastpathT) EncMapBoolInt64V(v map[bool]int64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolInt64V(v map[bool]int64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -15321,43 +13800,36 @@ func (_ fastpathT) EncMapBoolInt64V(v map[bool]int64, checkNil bool, e *Encoder)
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v[bool(k2)]))
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeInt(int64(v2))
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolFloat32R(rv reflect.Value) {
- fastpathTV.EncMapBoolFloat32V(rv.Interface().(map[bool]float32), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolFloat32R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolFloat32V(rv2i(rv).(map[bool]float32), e)
}
-func (_ fastpathT) EncMapBoolFloat32V(v map[bool]float32, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolFloat32V(v map[bool]float32, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -15367,43 +13839,36 @@ func (_ fastpathT) EncMapBoolFloat32V(v map[bool]float32, checkNil bool, e *Enco
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v[bool(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat32(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolFloat64R(rv reflect.Value) {
- fastpathTV.EncMapBoolFloat64V(rv.Interface().(map[bool]float64), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolFloat64R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolFloat64V(rv2i(rv).(map[bool]float64), e)
}
-func (_ fastpathT) EncMapBoolFloat64V(v map[bool]float64, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolFloat64V(v map[bool]float64, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -15413,43 +13878,36 @@ func (_ fastpathT) EncMapBoolFloat64V(v map[bool]float64, checkNil bool, e *Enco
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v[bool(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeFloat64(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
-func (f *encFnInfo) fastpathEncMapBoolBoolR(rv reflect.Value) {
- fastpathTV.EncMapBoolBoolV(rv.Interface().(map[bool]bool), fastpathCheckNilFalse, f.e)
+func (e *Encoder) fastpathEncMapBoolBoolR(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.EncMapBoolBoolV(rv2i(rv).(map[bool]bool), e)
}
-func (_ fastpathT) EncMapBoolBoolV(v map[bool]bool, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) EncMapBoolBoolV(v map[bool]bool, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
if e.h.Canonical {
v2 := make([]bool, len(v))
var i int
@@ -15459,2206 +13917,1930 @@ func (_ fastpathT) EncMapBoolBoolV(v map[bool]bool, checkNil bool, e *Encoder) {
}
sort.Sort(boolSlice(v2))
for _, k2 := range v2 {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(bool(k2))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v[bool(k2)])
}
} else {
for k2, v2 := range v {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
+ if esep {
+ ee.WriteMapElemKey()
}
ee.EncodeBool(k2)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
+ if esep {
+ ee.WriteMapElemValue()
}
ee.EncodeBool(v2)
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ ee.WriteMapEnd()
}
// -- decode
// -- -- fast path type switch
func fastpathDecodeTypeSwitch(iv interface{}, d *Decoder) bool {
- if !fastpathEnabled {
- return false
- }
switch v := iv.(type) {
case []interface{}:
- fastpathTV.DecSliceIntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecSliceIntfV(v, false, d)
case *[]interface{}:
- v2, changed2 := fastpathTV.DecSliceIntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecSliceIntfV(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]interface{}:
- fastpathTV.DecMapIntfIntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfIntfV(v, false, d)
case *map[interface{}]interface{}:
- v2, changed2 := fastpathTV.DecMapIntfIntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfIntfV(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]string:
- fastpathTV.DecMapIntfStringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfStringV(v, false, d)
case *map[interface{}]string:
- v2, changed2 := fastpathTV.DecMapIntfStringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfStringV(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]uint:
- fastpathTV.DecMapIntfUintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfUintV(v, false, d)
case *map[interface{}]uint:
- v2, changed2 := fastpathTV.DecMapIntfUintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfUintV(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]uint8:
- fastpathTV.DecMapIntfUint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfUint8V(v, false, d)
case *map[interface{}]uint8:
- v2, changed2 := fastpathTV.DecMapIntfUint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfUint8V(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]uint16:
- fastpathTV.DecMapIntfUint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfUint16V(v, false, d)
case *map[interface{}]uint16:
- v2, changed2 := fastpathTV.DecMapIntfUint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfUint16V(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]uint32:
- fastpathTV.DecMapIntfUint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfUint32V(v, false, d)
case *map[interface{}]uint32:
- v2, changed2 := fastpathTV.DecMapIntfUint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfUint32V(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]uint64:
- fastpathTV.DecMapIntfUint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfUint64V(v, false, d)
case *map[interface{}]uint64:
- v2, changed2 := fastpathTV.DecMapIntfUint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfUint64V(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]uintptr:
- fastpathTV.DecMapIntfUintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfUintptrV(v, false, d)
case *map[interface{}]uintptr:
- v2, changed2 := fastpathTV.DecMapIntfUintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfUintptrV(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]int:
- fastpathTV.DecMapIntfIntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfIntV(v, false, d)
case *map[interface{}]int:
- v2, changed2 := fastpathTV.DecMapIntfIntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfIntV(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]int8:
- fastpathTV.DecMapIntfInt8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfInt8V(v, false, d)
case *map[interface{}]int8:
- v2, changed2 := fastpathTV.DecMapIntfInt8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfInt8V(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]int16:
- fastpathTV.DecMapIntfInt16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfInt16V(v, false, d)
case *map[interface{}]int16:
- v2, changed2 := fastpathTV.DecMapIntfInt16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfInt16V(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]int32:
- fastpathTV.DecMapIntfInt32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfInt32V(v, false, d)
case *map[interface{}]int32:
- v2, changed2 := fastpathTV.DecMapIntfInt32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfInt32V(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]int64:
- fastpathTV.DecMapIntfInt64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfInt64V(v, false, d)
case *map[interface{}]int64:
- v2, changed2 := fastpathTV.DecMapIntfInt64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfInt64V(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]float32:
- fastpathTV.DecMapIntfFloat32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfFloat32V(v, false, d)
case *map[interface{}]float32:
- v2, changed2 := fastpathTV.DecMapIntfFloat32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfFloat32V(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]float64:
- fastpathTV.DecMapIntfFloat64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfFloat64V(v, false, d)
case *map[interface{}]float64:
- v2, changed2 := fastpathTV.DecMapIntfFloat64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfFloat64V(*v, true, d); changed2 {
*v = v2
}
case map[interface{}]bool:
- fastpathTV.DecMapIntfBoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntfBoolV(v, false, d)
case *map[interface{}]bool:
- v2, changed2 := fastpathTV.DecMapIntfBoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntfBoolV(*v, true, d); changed2 {
*v = v2
}
case []string:
- fastpathTV.DecSliceStringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecSliceStringV(v, false, d)
case *[]string:
- v2, changed2 := fastpathTV.DecSliceStringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecSliceStringV(*v, true, d); changed2 {
*v = v2
}
case map[string]interface{}:
- fastpathTV.DecMapStringIntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringIntfV(v, false, d)
case *map[string]interface{}:
- v2, changed2 := fastpathTV.DecMapStringIntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringIntfV(*v, true, d); changed2 {
*v = v2
}
case map[string]string:
- fastpathTV.DecMapStringStringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringStringV(v, false, d)
case *map[string]string:
- v2, changed2 := fastpathTV.DecMapStringStringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringStringV(*v, true, d); changed2 {
*v = v2
}
case map[string]uint:
- fastpathTV.DecMapStringUintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringUintV(v, false, d)
case *map[string]uint:
- v2, changed2 := fastpathTV.DecMapStringUintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringUintV(*v, true, d); changed2 {
*v = v2
}
case map[string]uint8:
- fastpathTV.DecMapStringUint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringUint8V(v, false, d)
case *map[string]uint8:
- v2, changed2 := fastpathTV.DecMapStringUint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringUint8V(*v, true, d); changed2 {
*v = v2
}
case map[string]uint16:
- fastpathTV.DecMapStringUint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringUint16V(v, false, d)
case *map[string]uint16:
- v2, changed2 := fastpathTV.DecMapStringUint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringUint16V(*v, true, d); changed2 {
*v = v2
}
case map[string]uint32:
- fastpathTV.DecMapStringUint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringUint32V(v, false, d)
case *map[string]uint32:
- v2, changed2 := fastpathTV.DecMapStringUint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringUint32V(*v, true, d); changed2 {
*v = v2
}
case map[string]uint64:
- fastpathTV.DecMapStringUint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringUint64V(v, false, d)
case *map[string]uint64:
- v2, changed2 := fastpathTV.DecMapStringUint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringUint64V(*v, true, d); changed2 {
*v = v2
}
case map[string]uintptr:
- fastpathTV.DecMapStringUintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringUintptrV(v, false, d)
case *map[string]uintptr:
- v2, changed2 := fastpathTV.DecMapStringUintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringUintptrV(*v, true, d); changed2 {
*v = v2
}
case map[string]int:
- fastpathTV.DecMapStringIntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringIntV(v, false, d)
case *map[string]int:
- v2, changed2 := fastpathTV.DecMapStringIntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringIntV(*v, true, d); changed2 {
*v = v2
}
case map[string]int8:
- fastpathTV.DecMapStringInt8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringInt8V(v, false, d)
case *map[string]int8:
- v2, changed2 := fastpathTV.DecMapStringInt8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringInt8V(*v, true, d); changed2 {
*v = v2
}
case map[string]int16:
- fastpathTV.DecMapStringInt16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringInt16V(v, false, d)
case *map[string]int16:
- v2, changed2 := fastpathTV.DecMapStringInt16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringInt16V(*v, true, d); changed2 {
*v = v2
}
case map[string]int32:
- fastpathTV.DecMapStringInt32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringInt32V(v, false, d)
case *map[string]int32:
- v2, changed2 := fastpathTV.DecMapStringInt32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringInt32V(*v, true, d); changed2 {
*v = v2
}
case map[string]int64:
- fastpathTV.DecMapStringInt64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringInt64V(v, false, d)
case *map[string]int64:
- v2, changed2 := fastpathTV.DecMapStringInt64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringInt64V(*v, true, d); changed2 {
*v = v2
}
case map[string]float32:
- fastpathTV.DecMapStringFloat32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringFloat32V(v, false, d)
case *map[string]float32:
- v2, changed2 := fastpathTV.DecMapStringFloat32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringFloat32V(*v, true, d); changed2 {
*v = v2
}
case map[string]float64:
- fastpathTV.DecMapStringFloat64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringFloat64V(v, false, d)
case *map[string]float64:
- v2, changed2 := fastpathTV.DecMapStringFloat64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringFloat64V(*v, true, d); changed2 {
*v = v2
}
case map[string]bool:
- fastpathTV.DecMapStringBoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapStringBoolV(v, false, d)
case *map[string]bool:
- v2, changed2 := fastpathTV.DecMapStringBoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapStringBoolV(*v, true, d); changed2 {
*v = v2
}
case []float32:
- fastpathTV.DecSliceFloat32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecSliceFloat32V(v, false, d)
case *[]float32:
- v2, changed2 := fastpathTV.DecSliceFloat32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecSliceFloat32V(*v, true, d); changed2 {
*v = v2
}
case map[float32]interface{}:
- fastpathTV.DecMapFloat32IntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32IntfV(v, false, d)
case *map[float32]interface{}:
- v2, changed2 := fastpathTV.DecMapFloat32IntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32IntfV(*v, true, d); changed2 {
*v = v2
}
case map[float32]string:
- fastpathTV.DecMapFloat32StringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32StringV(v, false, d)
case *map[float32]string:
- v2, changed2 := fastpathTV.DecMapFloat32StringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32StringV(*v, true, d); changed2 {
*v = v2
}
case map[float32]uint:
- fastpathTV.DecMapFloat32UintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32UintV(v, false, d)
case *map[float32]uint:
- v2, changed2 := fastpathTV.DecMapFloat32UintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32UintV(*v, true, d); changed2 {
*v = v2
}
case map[float32]uint8:
- fastpathTV.DecMapFloat32Uint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32Uint8V(v, false, d)
case *map[float32]uint8:
- v2, changed2 := fastpathTV.DecMapFloat32Uint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32Uint8V(*v, true, d); changed2 {
*v = v2
}
case map[float32]uint16:
- fastpathTV.DecMapFloat32Uint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32Uint16V(v, false, d)
case *map[float32]uint16:
- v2, changed2 := fastpathTV.DecMapFloat32Uint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32Uint16V(*v, true, d); changed2 {
*v = v2
}
case map[float32]uint32:
- fastpathTV.DecMapFloat32Uint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32Uint32V(v, false, d)
case *map[float32]uint32:
- v2, changed2 := fastpathTV.DecMapFloat32Uint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32Uint32V(*v, true, d); changed2 {
*v = v2
}
case map[float32]uint64:
- fastpathTV.DecMapFloat32Uint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32Uint64V(v, false, d)
case *map[float32]uint64:
- v2, changed2 := fastpathTV.DecMapFloat32Uint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32Uint64V(*v, true, d); changed2 {
*v = v2
}
case map[float32]uintptr:
- fastpathTV.DecMapFloat32UintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32UintptrV(v, false, d)
case *map[float32]uintptr:
- v2, changed2 := fastpathTV.DecMapFloat32UintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32UintptrV(*v, true, d); changed2 {
*v = v2
}
case map[float32]int:
- fastpathTV.DecMapFloat32IntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32IntV(v, false, d)
case *map[float32]int:
- v2, changed2 := fastpathTV.DecMapFloat32IntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32IntV(*v, true, d); changed2 {
*v = v2
}
case map[float32]int8:
- fastpathTV.DecMapFloat32Int8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32Int8V(v, false, d)
case *map[float32]int8:
- v2, changed2 := fastpathTV.DecMapFloat32Int8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32Int8V(*v, true, d); changed2 {
*v = v2
}
case map[float32]int16:
- fastpathTV.DecMapFloat32Int16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32Int16V(v, false, d)
case *map[float32]int16:
- v2, changed2 := fastpathTV.DecMapFloat32Int16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32Int16V(*v, true, d); changed2 {
*v = v2
}
case map[float32]int32:
- fastpathTV.DecMapFloat32Int32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32Int32V(v, false, d)
case *map[float32]int32:
- v2, changed2 := fastpathTV.DecMapFloat32Int32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32Int32V(*v, true, d); changed2 {
*v = v2
}
case map[float32]int64:
- fastpathTV.DecMapFloat32Int64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32Int64V(v, false, d)
case *map[float32]int64:
- v2, changed2 := fastpathTV.DecMapFloat32Int64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32Int64V(*v, true, d); changed2 {
*v = v2
}
case map[float32]float32:
- fastpathTV.DecMapFloat32Float32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32Float32V(v, false, d)
case *map[float32]float32:
- v2, changed2 := fastpathTV.DecMapFloat32Float32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32Float32V(*v, true, d); changed2 {
*v = v2
}
case map[float32]float64:
- fastpathTV.DecMapFloat32Float64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32Float64V(v, false, d)
case *map[float32]float64:
- v2, changed2 := fastpathTV.DecMapFloat32Float64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32Float64V(*v, true, d); changed2 {
*v = v2
}
case map[float32]bool:
- fastpathTV.DecMapFloat32BoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat32BoolV(v, false, d)
case *map[float32]bool:
- v2, changed2 := fastpathTV.DecMapFloat32BoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat32BoolV(*v, true, d); changed2 {
*v = v2
}
case []float64:
- fastpathTV.DecSliceFloat64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecSliceFloat64V(v, false, d)
case *[]float64:
- v2, changed2 := fastpathTV.DecSliceFloat64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecSliceFloat64V(*v, true, d); changed2 {
*v = v2
}
case map[float64]interface{}:
- fastpathTV.DecMapFloat64IntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64IntfV(v, false, d)
case *map[float64]interface{}:
- v2, changed2 := fastpathTV.DecMapFloat64IntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64IntfV(*v, true, d); changed2 {
*v = v2
}
case map[float64]string:
- fastpathTV.DecMapFloat64StringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64StringV(v, false, d)
case *map[float64]string:
- v2, changed2 := fastpathTV.DecMapFloat64StringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64StringV(*v, true, d); changed2 {
*v = v2
}
case map[float64]uint:
- fastpathTV.DecMapFloat64UintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64UintV(v, false, d)
case *map[float64]uint:
- v2, changed2 := fastpathTV.DecMapFloat64UintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64UintV(*v, true, d); changed2 {
*v = v2
}
case map[float64]uint8:
- fastpathTV.DecMapFloat64Uint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64Uint8V(v, false, d)
case *map[float64]uint8:
- v2, changed2 := fastpathTV.DecMapFloat64Uint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64Uint8V(*v, true, d); changed2 {
*v = v2
}
case map[float64]uint16:
- fastpathTV.DecMapFloat64Uint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64Uint16V(v, false, d)
case *map[float64]uint16:
- v2, changed2 := fastpathTV.DecMapFloat64Uint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64Uint16V(*v, true, d); changed2 {
*v = v2
}
case map[float64]uint32:
- fastpathTV.DecMapFloat64Uint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64Uint32V(v, false, d)
case *map[float64]uint32:
- v2, changed2 := fastpathTV.DecMapFloat64Uint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64Uint32V(*v, true, d); changed2 {
*v = v2
}
case map[float64]uint64:
- fastpathTV.DecMapFloat64Uint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64Uint64V(v, false, d)
case *map[float64]uint64:
- v2, changed2 := fastpathTV.DecMapFloat64Uint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64Uint64V(*v, true, d); changed2 {
*v = v2
}
case map[float64]uintptr:
- fastpathTV.DecMapFloat64UintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64UintptrV(v, false, d)
case *map[float64]uintptr:
- v2, changed2 := fastpathTV.DecMapFloat64UintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64UintptrV(*v, true, d); changed2 {
*v = v2
}
case map[float64]int:
- fastpathTV.DecMapFloat64IntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64IntV(v, false, d)
case *map[float64]int:
- v2, changed2 := fastpathTV.DecMapFloat64IntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64IntV(*v, true, d); changed2 {
*v = v2
}
case map[float64]int8:
- fastpathTV.DecMapFloat64Int8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64Int8V(v, false, d)
case *map[float64]int8:
- v2, changed2 := fastpathTV.DecMapFloat64Int8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64Int8V(*v, true, d); changed2 {
*v = v2
}
case map[float64]int16:
- fastpathTV.DecMapFloat64Int16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64Int16V(v, false, d)
case *map[float64]int16:
- v2, changed2 := fastpathTV.DecMapFloat64Int16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64Int16V(*v, true, d); changed2 {
*v = v2
}
case map[float64]int32:
- fastpathTV.DecMapFloat64Int32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64Int32V(v, false, d)
case *map[float64]int32:
- v2, changed2 := fastpathTV.DecMapFloat64Int32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64Int32V(*v, true, d); changed2 {
*v = v2
}
case map[float64]int64:
- fastpathTV.DecMapFloat64Int64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64Int64V(v, false, d)
case *map[float64]int64:
- v2, changed2 := fastpathTV.DecMapFloat64Int64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64Int64V(*v, true, d); changed2 {
*v = v2
}
case map[float64]float32:
- fastpathTV.DecMapFloat64Float32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64Float32V(v, false, d)
case *map[float64]float32:
- v2, changed2 := fastpathTV.DecMapFloat64Float32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64Float32V(*v, true, d); changed2 {
*v = v2
}
case map[float64]float64:
- fastpathTV.DecMapFloat64Float64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64Float64V(v, false, d)
case *map[float64]float64:
- v2, changed2 := fastpathTV.DecMapFloat64Float64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64Float64V(*v, true, d); changed2 {
*v = v2
}
case map[float64]bool:
- fastpathTV.DecMapFloat64BoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapFloat64BoolV(v, false, d)
case *map[float64]bool:
- v2, changed2 := fastpathTV.DecMapFloat64BoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapFloat64BoolV(*v, true, d); changed2 {
*v = v2
}
case []uint:
- fastpathTV.DecSliceUintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecSliceUintV(v, false, d)
case *[]uint:
- v2, changed2 := fastpathTV.DecSliceUintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecSliceUintV(*v, true, d); changed2 {
*v = v2
}
case map[uint]interface{}:
- fastpathTV.DecMapUintIntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintIntfV(v, false, d)
case *map[uint]interface{}:
- v2, changed2 := fastpathTV.DecMapUintIntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintIntfV(*v, true, d); changed2 {
*v = v2
}
case map[uint]string:
- fastpathTV.DecMapUintStringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintStringV(v, false, d)
case *map[uint]string:
- v2, changed2 := fastpathTV.DecMapUintStringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintStringV(*v, true, d); changed2 {
*v = v2
}
case map[uint]uint:
- fastpathTV.DecMapUintUintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintUintV(v, false, d)
case *map[uint]uint:
- v2, changed2 := fastpathTV.DecMapUintUintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintUintV(*v, true, d); changed2 {
*v = v2
}
case map[uint]uint8:
- fastpathTV.DecMapUintUint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintUint8V(v, false, d)
case *map[uint]uint8:
- v2, changed2 := fastpathTV.DecMapUintUint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintUint8V(*v, true, d); changed2 {
*v = v2
}
case map[uint]uint16:
- fastpathTV.DecMapUintUint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintUint16V(v, false, d)
case *map[uint]uint16:
- v2, changed2 := fastpathTV.DecMapUintUint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintUint16V(*v, true, d); changed2 {
*v = v2
}
case map[uint]uint32:
- fastpathTV.DecMapUintUint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintUint32V(v, false, d)
case *map[uint]uint32:
- v2, changed2 := fastpathTV.DecMapUintUint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintUint32V(*v, true, d); changed2 {
*v = v2
}
case map[uint]uint64:
- fastpathTV.DecMapUintUint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintUint64V(v, false, d)
case *map[uint]uint64:
- v2, changed2 := fastpathTV.DecMapUintUint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintUint64V(*v, true, d); changed2 {
*v = v2
}
case map[uint]uintptr:
- fastpathTV.DecMapUintUintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintUintptrV(v, false, d)
case *map[uint]uintptr:
- v2, changed2 := fastpathTV.DecMapUintUintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintUintptrV(*v, true, d); changed2 {
*v = v2
}
case map[uint]int:
- fastpathTV.DecMapUintIntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintIntV(v, false, d)
case *map[uint]int:
- v2, changed2 := fastpathTV.DecMapUintIntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintIntV(*v, true, d); changed2 {
*v = v2
}
case map[uint]int8:
- fastpathTV.DecMapUintInt8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintInt8V(v, false, d)
case *map[uint]int8:
- v2, changed2 := fastpathTV.DecMapUintInt8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintInt8V(*v, true, d); changed2 {
*v = v2
}
case map[uint]int16:
- fastpathTV.DecMapUintInt16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintInt16V(v, false, d)
case *map[uint]int16:
- v2, changed2 := fastpathTV.DecMapUintInt16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintInt16V(*v, true, d); changed2 {
*v = v2
}
case map[uint]int32:
- fastpathTV.DecMapUintInt32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintInt32V(v, false, d)
case *map[uint]int32:
- v2, changed2 := fastpathTV.DecMapUintInt32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintInt32V(*v, true, d); changed2 {
*v = v2
}
case map[uint]int64:
- fastpathTV.DecMapUintInt64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintInt64V(v, false, d)
case *map[uint]int64:
- v2, changed2 := fastpathTV.DecMapUintInt64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintInt64V(*v, true, d); changed2 {
*v = v2
}
case map[uint]float32:
- fastpathTV.DecMapUintFloat32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintFloat32V(v, false, d)
case *map[uint]float32:
- v2, changed2 := fastpathTV.DecMapUintFloat32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintFloat32V(*v, true, d); changed2 {
*v = v2
}
case map[uint]float64:
- fastpathTV.DecMapUintFloat64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintFloat64V(v, false, d)
case *map[uint]float64:
- v2, changed2 := fastpathTV.DecMapUintFloat64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintFloat64V(*v, true, d); changed2 {
*v = v2
}
case map[uint]bool:
- fastpathTV.DecMapUintBoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintBoolV(v, false, d)
case *map[uint]bool:
- v2, changed2 := fastpathTV.DecMapUintBoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintBoolV(*v, true, d); changed2 {
*v = v2
}
case map[uint8]interface{}:
- fastpathTV.DecMapUint8IntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8IntfV(v, false, d)
case *map[uint8]interface{}:
- v2, changed2 := fastpathTV.DecMapUint8IntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8IntfV(*v, true, d); changed2 {
*v = v2
}
case map[uint8]string:
- fastpathTV.DecMapUint8StringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8StringV(v, false, d)
case *map[uint8]string:
- v2, changed2 := fastpathTV.DecMapUint8StringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8StringV(*v, true, d); changed2 {
*v = v2
}
case map[uint8]uint:
- fastpathTV.DecMapUint8UintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8UintV(v, false, d)
case *map[uint8]uint:
- v2, changed2 := fastpathTV.DecMapUint8UintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8UintV(*v, true, d); changed2 {
*v = v2
}
case map[uint8]uint8:
- fastpathTV.DecMapUint8Uint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8Uint8V(v, false, d)
case *map[uint8]uint8:
- v2, changed2 := fastpathTV.DecMapUint8Uint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8Uint8V(*v, true, d); changed2 {
*v = v2
}
case map[uint8]uint16:
- fastpathTV.DecMapUint8Uint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8Uint16V(v, false, d)
case *map[uint8]uint16:
- v2, changed2 := fastpathTV.DecMapUint8Uint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8Uint16V(*v, true, d); changed2 {
*v = v2
}
case map[uint8]uint32:
- fastpathTV.DecMapUint8Uint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8Uint32V(v, false, d)
case *map[uint8]uint32:
- v2, changed2 := fastpathTV.DecMapUint8Uint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8Uint32V(*v, true, d); changed2 {
*v = v2
}
case map[uint8]uint64:
- fastpathTV.DecMapUint8Uint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8Uint64V(v, false, d)
case *map[uint8]uint64:
- v2, changed2 := fastpathTV.DecMapUint8Uint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8Uint64V(*v, true, d); changed2 {
*v = v2
}
case map[uint8]uintptr:
- fastpathTV.DecMapUint8UintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8UintptrV(v, false, d)
case *map[uint8]uintptr:
- v2, changed2 := fastpathTV.DecMapUint8UintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8UintptrV(*v, true, d); changed2 {
*v = v2
}
case map[uint8]int:
- fastpathTV.DecMapUint8IntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8IntV(v, false, d)
case *map[uint8]int:
- v2, changed2 := fastpathTV.DecMapUint8IntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8IntV(*v, true, d); changed2 {
*v = v2
}
case map[uint8]int8:
- fastpathTV.DecMapUint8Int8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8Int8V(v, false, d)
case *map[uint8]int8:
- v2, changed2 := fastpathTV.DecMapUint8Int8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8Int8V(*v, true, d); changed2 {
*v = v2
}
case map[uint8]int16:
- fastpathTV.DecMapUint8Int16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8Int16V(v, false, d)
case *map[uint8]int16:
- v2, changed2 := fastpathTV.DecMapUint8Int16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8Int16V(*v, true, d); changed2 {
*v = v2
}
case map[uint8]int32:
- fastpathTV.DecMapUint8Int32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8Int32V(v, false, d)
case *map[uint8]int32:
- v2, changed2 := fastpathTV.DecMapUint8Int32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8Int32V(*v, true, d); changed2 {
*v = v2
}
case map[uint8]int64:
- fastpathTV.DecMapUint8Int64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8Int64V(v, false, d)
case *map[uint8]int64:
- v2, changed2 := fastpathTV.DecMapUint8Int64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8Int64V(*v, true, d); changed2 {
*v = v2
}
case map[uint8]float32:
- fastpathTV.DecMapUint8Float32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8Float32V(v, false, d)
case *map[uint8]float32:
- v2, changed2 := fastpathTV.DecMapUint8Float32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8Float32V(*v, true, d); changed2 {
*v = v2
}
case map[uint8]float64:
- fastpathTV.DecMapUint8Float64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8Float64V(v, false, d)
case *map[uint8]float64:
- v2, changed2 := fastpathTV.DecMapUint8Float64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8Float64V(*v, true, d); changed2 {
*v = v2
}
case map[uint8]bool:
- fastpathTV.DecMapUint8BoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint8BoolV(v, false, d)
case *map[uint8]bool:
- v2, changed2 := fastpathTV.DecMapUint8BoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint8BoolV(*v, true, d); changed2 {
*v = v2
}
case []uint16:
- fastpathTV.DecSliceUint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecSliceUint16V(v, false, d)
case *[]uint16:
- v2, changed2 := fastpathTV.DecSliceUint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecSliceUint16V(*v, true, d); changed2 {
*v = v2
}
case map[uint16]interface{}:
- fastpathTV.DecMapUint16IntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16IntfV(v, false, d)
case *map[uint16]interface{}:
- v2, changed2 := fastpathTV.DecMapUint16IntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16IntfV(*v, true, d); changed2 {
*v = v2
}
case map[uint16]string:
- fastpathTV.DecMapUint16StringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16StringV(v, false, d)
case *map[uint16]string:
- v2, changed2 := fastpathTV.DecMapUint16StringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16StringV(*v, true, d); changed2 {
*v = v2
}
case map[uint16]uint:
- fastpathTV.DecMapUint16UintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16UintV(v, false, d)
case *map[uint16]uint:
- v2, changed2 := fastpathTV.DecMapUint16UintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16UintV(*v, true, d); changed2 {
*v = v2
}
case map[uint16]uint8:
- fastpathTV.DecMapUint16Uint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16Uint8V(v, false, d)
case *map[uint16]uint8:
- v2, changed2 := fastpathTV.DecMapUint16Uint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16Uint8V(*v, true, d); changed2 {
*v = v2
}
case map[uint16]uint16:
- fastpathTV.DecMapUint16Uint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16Uint16V(v, false, d)
case *map[uint16]uint16:
- v2, changed2 := fastpathTV.DecMapUint16Uint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16Uint16V(*v, true, d); changed2 {
*v = v2
}
case map[uint16]uint32:
- fastpathTV.DecMapUint16Uint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16Uint32V(v, false, d)
case *map[uint16]uint32:
- v2, changed2 := fastpathTV.DecMapUint16Uint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16Uint32V(*v, true, d); changed2 {
*v = v2
}
case map[uint16]uint64:
- fastpathTV.DecMapUint16Uint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16Uint64V(v, false, d)
case *map[uint16]uint64:
- v2, changed2 := fastpathTV.DecMapUint16Uint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16Uint64V(*v, true, d); changed2 {
*v = v2
}
case map[uint16]uintptr:
- fastpathTV.DecMapUint16UintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16UintptrV(v, false, d)
case *map[uint16]uintptr:
- v2, changed2 := fastpathTV.DecMapUint16UintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16UintptrV(*v, true, d); changed2 {
*v = v2
}
case map[uint16]int:
- fastpathTV.DecMapUint16IntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16IntV(v, false, d)
case *map[uint16]int:
- v2, changed2 := fastpathTV.DecMapUint16IntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16IntV(*v, true, d); changed2 {
*v = v2
}
case map[uint16]int8:
- fastpathTV.DecMapUint16Int8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16Int8V(v, false, d)
case *map[uint16]int8:
- v2, changed2 := fastpathTV.DecMapUint16Int8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16Int8V(*v, true, d); changed2 {
*v = v2
}
case map[uint16]int16:
- fastpathTV.DecMapUint16Int16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16Int16V(v, false, d)
case *map[uint16]int16:
- v2, changed2 := fastpathTV.DecMapUint16Int16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16Int16V(*v, true, d); changed2 {
*v = v2
}
case map[uint16]int32:
- fastpathTV.DecMapUint16Int32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16Int32V(v, false, d)
case *map[uint16]int32:
- v2, changed2 := fastpathTV.DecMapUint16Int32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16Int32V(*v, true, d); changed2 {
*v = v2
}
case map[uint16]int64:
- fastpathTV.DecMapUint16Int64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16Int64V(v, false, d)
case *map[uint16]int64:
- v2, changed2 := fastpathTV.DecMapUint16Int64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16Int64V(*v, true, d); changed2 {
*v = v2
}
case map[uint16]float32:
- fastpathTV.DecMapUint16Float32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16Float32V(v, false, d)
case *map[uint16]float32:
- v2, changed2 := fastpathTV.DecMapUint16Float32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16Float32V(*v, true, d); changed2 {
*v = v2
}
case map[uint16]float64:
- fastpathTV.DecMapUint16Float64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16Float64V(v, false, d)
case *map[uint16]float64:
- v2, changed2 := fastpathTV.DecMapUint16Float64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16Float64V(*v, true, d); changed2 {
*v = v2
}
case map[uint16]bool:
- fastpathTV.DecMapUint16BoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint16BoolV(v, false, d)
case *map[uint16]bool:
- v2, changed2 := fastpathTV.DecMapUint16BoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint16BoolV(*v, true, d); changed2 {
*v = v2
}
case []uint32:
- fastpathTV.DecSliceUint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecSliceUint32V(v, false, d)
case *[]uint32:
- v2, changed2 := fastpathTV.DecSliceUint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecSliceUint32V(*v, true, d); changed2 {
*v = v2
}
case map[uint32]interface{}:
- fastpathTV.DecMapUint32IntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32IntfV(v, false, d)
case *map[uint32]interface{}:
- v2, changed2 := fastpathTV.DecMapUint32IntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32IntfV(*v, true, d); changed2 {
*v = v2
}
case map[uint32]string:
- fastpathTV.DecMapUint32StringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32StringV(v, false, d)
case *map[uint32]string:
- v2, changed2 := fastpathTV.DecMapUint32StringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32StringV(*v, true, d); changed2 {
*v = v2
}
case map[uint32]uint:
- fastpathTV.DecMapUint32UintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32UintV(v, false, d)
case *map[uint32]uint:
- v2, changed2 := fastpathTV.DecMapUint32UintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32UintV(*v, true, d); changed2 {
*v = v2
}
case map[uint32]uint8:
- fastpathTV.DecMapUint32Uint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32Uint8V(v, false, d)
case *map[uint32]uint8:
- v2, changed2 := fastpathTV.DecMapUint32Uint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32Uint8V(*v, true, d); changed2 {
*v = v2
}
case map[uint32]uint16:
- fastpathTV.DecMapUint32Uint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32Uint16V(v, false, d)
case *map[uint32]uint16:
- v2, changed2 := fastpathTV.DecMapUint32Uint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32Uint16V(*v, true, d); changed2 {
*v = v2
}
case map[uint32]uint32:
- fastpathTV.DecMapUint32Uint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32Uint32V(v, false, d)
case *map[uint32]uint32:
- v2, changed2 := fastpathTV.DecMapUint32Uint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32Uint32V(*v, true, d); changed2 {
*v = v2
}
case map[uint32]uint64:
- fastpathTV.DecMapUint32Uint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32Uint64V(v, false, d)
case *map[uint32]uint64:
- v2, changed2 := fastpathTV.DecMapUint32Uint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32Uint64V(*v, true, d); changed2 {
*v = v2
}
case map[uint32]uintptr:
- fastpathTV.DecMapUint32UintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32UintptrV(v, false, d)
case *map[uint32]uintptr:
- v2, changed2 := fastpathTV.DecMapUint32UintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32UintptrV(*v, true, d); changed2 {
*v = v2
}
case map[uint32]int:
- fastpathTV.DecMapUint32IntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32IntV(v, false, d)
case *map[uint32]int:
- v2, changed2 := fastpathTV.DecMapUint32IntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32IntV(*v, true, d); changed2 {
*v = v2
}
case map[uint32]int8:
- fastpathTV.DecMapUint32Int8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32Int8V(v, false, d)
case *map[uint32]int8:
- v2, changed2 := fastpathTV.DecMapUint32Int8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32Int8V(*v, true, d); changed2 {
*v = v2
}
case map[uint32]int16:
- fastpathTV.DecMapUint32Int16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32Int16V(v, false, d)
case *map[uint32]int16:
- v2, changed2 := fastpathTV.DecMapUint32Int16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32Int16V(*v, true, d); changed2 {
*v = v2
}
case map[uint32]int32:
- fastpathTV.DecMapUint32Int32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32Int32V(v, false, d)
case *map[uint32]int32:
- v2, changed2 := fastpathTV.DecMapUint32Int32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32Int32V(*v, true, d); changed2 {
*v = v2
}
case map[uint32]int64:
- fastpathTV.DecMapUint32Int64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32Int64V(v, false, d)
case *map[uint32]int64:
- v2, changed2 := fastpathTV.DecMapUint32Int64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32Int64V(*v, true, d); changed2 {
*v = v2
}
case map[uint32]float32:
- fastpathTV.DecMapUint32Float32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32Float32V(v, false, d)
case *map[uint32]float32:
- v2, changed2 := fastpathTV.DecMapUint32Float32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32Float32V(*v, true, d); changed2 {
*v = v2
}
case map[uint32]float64:
- fastpathTV.DecMapUint32Float64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32Float64V(v, false, d)
case *map[uint32]float64:
- v2, changed2 := fastpathTV.DecMapUint32Float64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32Float64V(*v, true, d); changed2 {
*v = v2
}
case map[uint32]bool:
- fastpathTV.DecMapUint32BoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint32BoolV(v, false, d)
case *map[uint32]bool:
- v2, changed2 := fastpathTV.DecMapUint32BoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint32BoolV(*v, true, d); changed2 {
*v = v2
}
case []uint64:
- fastpathTV.DecSliceUint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecSliceUint64V(v, false, d)
case *[]uint64:
- v2, changed2 := fastpathTV.DecSliceUint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecSliceUint64V(*v, true, d); changed2 {
*v = v2
}
case map[uint64]interface{}:
- fastpathTV.DecMapUint64IntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64IntfV(v, false, d)
case *map[uint64]interface{}:
- v2, changed2 := fastpathTV.DecMapUint64IntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64IntfV(*v, true, d); changed2 {
*v = v2
}
case map[uint64]string:
- fastpathTV.DecMapUint64StringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64StringV(v, false, d)
case *map[uint64]string:
- v2, changed2 := fastpathTV.DecMapUint64StringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64StringV(*v, true, d); changed2 {
*v = v2
}
case map[uint64]uint:
- fastpathTV.DecMapUint64UintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64UintV(v, false, d)
case *map[uint64]uint:
- v2, changed2 := fastpathTV.DecMapUint64UintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64UintV(*v, true, d); changed2 {
*v = v2
}
case map[uint64]uint8:
- fastpathTV.DecMapUint64Uint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64Uint8V(v, false, d)
case *map[uint64]uint8:
- v2, changed2 := fastpathTV.DecMapUint64Uint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64Uint8V(*v, true, d); changed2 {
*v = v2
}
case map[uint64]uint16:
- fastpathTV.DecMapUint64Uint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64Uint16V(v, false, d)
case *map[uint64]uint16:
- v2, changed2 := fastpathTV.DecMapUint64Uint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64Uint16V(*v, true, d); changed2 {
*v = v2
}
case map[uint64]uint32:
- fastpathTV.DecMapUint64Uint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64Uint32V(v, false, d)
case *map[uint64]uint32:
- v2, changed2 := fastpathTV.DecMapUint64Uint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64Uint32V(*v, true, d); changed2 {
*v = v2
}
case map[uint64]uint64:
- fastpathTV.DecMapUint64Uint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64Uint64V(v, false, d)
case *map[uint64]uint64:
- v2, changed2 := fastpathTV.DecMapUint64Uint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64Uint64V(*v, true, d); changed2 {
*v = v2
}
case map[uint64]uintptr:
- fastpathTV.DecMapUint64UintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64UintptrV(v, false, d)
case *map[uint64]uintptr:
- v2, changed2 := fastpathTV.DecMapUint64UintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64UintptrV(*v, true, d); changed2 {
*v = v2
}
case map[uint64]int:
- fastpathTV.DecMapUint64IntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64IntV(v, false, d)
case *map[uint64]int:
- v2, changed2 := fastpathTV.DecMapUint64IntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64IntV(*v, true, d); changed2 {
*v = v2
}
case map[uint64]int8:
- fastpathTV.DecMapUint64Int8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64Int8V(v, false, d)
case *map[uint64]int8:
- v2, changed2 := fastpathTV.DecMapUint64Int8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64Int8V(*v, true, d); changed2 {
*v = v2
}
case map[uint64]int16:
- fastpathTV.DecMapUint64Int16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64Int16V(v, false, d)
case *map[uint64]int16:
- v2, changed2 := fastpathTV.DecMapUint64Int16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64Int16V(*v, true, d); changed2 {
*v = v2
}
case map[uint64]int32:
- fastpathTV.DecMapUint64Int32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64Int32V(v, false, d)
case *map[uint64]int32:
- v2, changed2 := fastpathTV.DecMapUint64Int32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64Int32V(*v, true, d); changed2 {
*v = v2
}
case map[uint64]int64:
- fastpathTV.DecMapUint64Int64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64Int64V(v, false, d)
case *map[uint64]int64:
- v2, changed2 := fastpathTV.DecMapUint64Int64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64Int64V(*v, true, d); changed2 {
*v = v2
}
case map[uint64]float32:
- fastpathTV.DecMapUint64Float32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64Float32V(v, false, d)
case *map[uint64]float32:
- v2, changed2 := fastpathTV.DecMapUint64Float32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64Float32V(*v, true, d); changed2 {
*v = v2
}
case map[uint64]float64:
- fastpathTV.DecMapUint64Float64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64Float64V(v, false, d)
case *map[uint64]float64:
- v2, changed2 := fastpathTV.DecMapUint64Float64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64Float64V(*v, true, d); changed2 {
*v = v2
}
case map[uint64]bool:
- fastpathTV.DecMapUint64BoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUint64BoolV(v, false, d)
case *map[uint64]bool:
- v2, changed2 := fastpathTV.DecMapUint64BoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUint64BoolV(*v, true, d); changed2 {
*v = v2
}
case []uintptr:
- fastpathTV.DecSliceUintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecSliceUintptrV(v, false, d)
case *[]uintptr:
- v2, changed2 := fastpathTV.DecSliceUintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecSliceUintptrV(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]interface{}:
- fastpathTV.DecMapUintptrIntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrIntfV(v, false, d)
case *map[uintptr]interface{}:
- v2, changed2 := fastpathTV.DecMapUintptrIntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrIntfV(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]string:
- fastpathTV.DecMapUintptrStringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrStringV(v, false, d)
case *map[uintptr]string:
- v2, changed2 := fastpathTV.DecMapUintptrStringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrStringV(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]uint:
- fastpathTV.DecMapUintptrUintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrUintV(v, false, d)
case *map[uintptr]uint:
- v2, changed2 := fastpathTV.DecMapUintptrUintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrUintV(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]uint8:
- fastpathTV.DecMapUintptrUint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrUint8V(v, false, d)
case *map[uintptr]uint8:
- v2, changed2 := fastpathTV.DecMapUintptrUint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrUint8V(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]uint16:
- fastpathTV.DecMapUintptrUint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrUint16V(v, false, d)
case *map[uintptr]uint16:
- v2, changed2 := fastpathTV.DecMapUintptrUint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrUint16V(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]uint32:
- fastpathTV.DecMapUintptrUint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrUint32V(v, false, d)
case *map[uintptr]uint32:
- v2, changed2 := fastpathTV.DecMapUintptrUint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrUint32V(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]uint64:
- fastpathTV.DecMapUintptrUint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrUint64V(v, false, d)
case *map[uintptr]uint64:
- v2, changed2 := fastpathTV.DecMapUintptrUint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrUint64V(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]uintptr:
- fastpathTV.DecMapUintptrUintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrUintptrV(v, false, d)
case *map[uintptr]uintptr:
- v2, changed2 := fastpathTV.DecMapUintptrUintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrUintptrV(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]int:
- fastpathTV.DecMapUintptrIntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrIntV(v, false, d)
case *map[uintptr]int:
- v2, changed2 := fastpathTV.DecMapUintptrIntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrIntV(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]int8:
- fastpathTV.DecMapUintptrInt8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrInt8V(v, false, d)
case *map[uintptr]int8:
- v2, changed2 := fastpathTV.DecMapUintptrInt8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrInt8V(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]int16:
- fastpathTV.DecMapUintptrInt16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrInt16V(v, false, d)
case *map[uintptr]int16:
- v2, changed2 := fastpathTV.DecMapUintptrInt16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrInt16V(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]int32:
- fastpathTV.DecMapUintptrInt32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrInt32V(v, false, d)
case *map[uintptr]int32:
- v2, changed2 := fastpathTV.DecMapUintptrInt32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrInt32V(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]int64:
- fastpathTV.DecMapUintptrInt64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrInt64V(v, false, d)
case *map[uintptr]int64:
- v2, changed2 := fastpathTV.DecMapUintptrInt64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrInt64V(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]float32:
- fastpathTV.DecMapUintptrFloat32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrFloat32V(v, false, d)
case *map[uintptr]float32:
- v2, changed2 := fastpathTV.DecMapUintptrFloat32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrFloat32V(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]float64:
- fastpathTV.DecMapUintptrFloat64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrFloat64V(v, false, d)
case *map[uintptr]float64:
- v2, changed2 := fastpathTV.DecMapUintptrFloat64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrFloat64V(*v, true, d); changed2 {
*v = v2
}
case map[uintptr]bool:
- fastpathTV.DecMapUintptrBoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapUintptrBoolV(v, false, d)
case *map[uintptr]bool:
- v2, changed2 := fastpathTV.DecMapUintptrBoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapUintptrBoolV(*v, true, d); changed2 {
*v = v2
}
case []int:
- fastpathTV.DecSliceIntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecSliceIntV(v, false, d)
case *[]int:
- v2, changed2 := fastpathTV.DecSliceIntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecSliceIntV(*v, true, d); changed2 {
*v = v2
}
case map[int]interface{}:
- fastpathTV.DecMapIntIntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntIntfV(v, false, d)
case *map[int]interface{}:
- v2, changed2 := fastpathTV.DecMapIntIntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntIntfV(*v, true, d); changed2 {
*v = v2
}
case map[int]string:
- fastpathTV.DecMapIntStringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntStringV(v, false, d)
case *map[int]string:
- v2, changed2 := fastpathTV.DecMapIntStringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntStringV(*v, true, d); changed2 {
*v = v2
}
case map[int]uint:
- fastpathTV.DecMapIntUintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntUintV(v, false, d)
case *map[int]uint:
- v2, changed2 := fastpathTV.DecMapIntUintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntUintV(*v, true, d); changed2 {
*v = v2
}
case map[int]uint8:
- fastpathTV.DecMapIntUint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntUint8V(v, false, d)
case *map[int]uint8:
- v2, changed2 := fastpathTV.DecMapIntUint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntUint8V(*v, true, d); changed2 {
*v = v2
}
case map[int]uint16:
- fastpathTV.DecMapIntUint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntUint16V(v, false, d)
case *map[int]uint16:
- v2, changed2 := fastpathTV.DecMapIntUint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntUint16V(*v, true, d); changed2 {
*v = v2
}
case map[int]uint32:
- fastpathTV.DecMapIntUint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntUint32V(v, false, d)
case *map[int]uint32:
- v2, changed2 := fastpathTV.DecMapIntUint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntUint32V(*v, true, d); changed2 {
*v = v2
}
case map[int]uint64:
- fastpathTV.DecMapIntUint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntUint64V(v, false, d)
case *map[int]uint64:
- v2, changed2 := fastpathTV.DecMapIntUint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntUint64V(*v, true, d); changed2 {
*v = v2
}
case map[int]uintptr:
- fastpathTV.DecMapIntUintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntUintptrV(v, false, d)
case *map[int]uintptr:
- v2, changed2 := fastpathTV.DecMapIntUintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntUintptrV(*v, true, d); changed2 {
*v = v2
}
case map[int]int:
- fastpathTV.DecMapIntIntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntIntV(v, false, d)
case *map[int]int:
- v2, changed2 := fastpathTV.DecMapIntIntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntIntV(*v, true, d); changed2 {
*v = v2
}
case map[int]int8:
- fastpathTV.DecMapIntInt8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntInt8V(v, false, d)
case *map[int]int8:
- v2, changed2 := fastpathTV.DecMapIntInt8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntInt8V(*v, true, d); changed2 {
*v = v2
}
case map[int]int16:
- fastpathTV.DecMapIntInt16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntInt16V(v, false, d)
case *map[int]int16:
- v2, changed2 := fastpathTV.DecMapIntInt16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntInt16V(*v, true, d); changed2 {
*v = v2
}
case map[int]int32:
- fastpathTV.DecMapIntInt32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntInt32V(v, false, d)
case *map[int]int32:
- v2, changed2 := fastpathTV.DecMapIntInt32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntInt32V(*v, true, d); changed2 {
*v = v2
}
case map[int]int64:
- fastpathTV.DecMapIntInt64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntInt64V(v, false, d)
case *map[int]int64:
- v2, changed2 := fastpathTV.DecMapIntInt64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntInt64V(*v, true, d); changed2 {
*v = v2
}
case map[int]float32:
- fastpathTV.DecMapIntFloat32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntFloat32V(v, false, d)
case *map[int]float32:
- v2, changed2 := fastpathTV.DecMapIntFloat32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntFloat32V(*v, true, d); changed2 {
*v = v2
}
case map[int]float64:
- fastpathTV.DecMapIntFloat64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntFloat64V(v, false, d)
case *map[int]float64:
- v2, changed2 := fastpathTV.DecMapIntFloat64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntFloat64V(*v, true, d); changed2 {
*v = v2
}
case map[int]bool:
- fastpathTV.DecMapIntBoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapIntBoolV(v, false, d)
case *map[int]bool:
- v2, changed2 := fastpathTV.DecMapIntBoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapIntBoolV(*v, true, d); changed2 {
*v = v2
}
case []int8:
- fastpathTV.DecSliceInt8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecSliceInt8V(v, false, d)
case *[]int8:
- v2, changed2 := fastpathTV.DecSliceInt8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecSliceInt8V(*v, true, d); changed2 {
*v = v2
}
case map[int8]interface{}:
- fastpathTV.DecMapInt8IntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8IntfV(v, false, d)
case *map[int8]interface{}:
- v2, changed2 := fastpathTV.DecMapInt8IntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8IntfV(*v, true, d); changed2 {
*v = v2
}
case map[int8]string:
- fastpathTV.DecMapInt8StringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8StringV(v, false, d)
case *map[int8]string:
- v2, changed2 := fastpathTV.DecMapInt8StringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8StringV(*v, true, d); changed2 {
*v = v2
}
case map[int8]uint:
- fastpathTV.DecMapInt8UintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8UintV(v, false, d)
case *map[int8]uint:
- v2, changed2 := fastpathTV.DecMapInt8UintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8UintV(*v, true, d); changed2 {
*v = v2
}
case map[int8]uint8:
- fastpathTV.DecMapInt8Uint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8Uint8V(v, false, d)
case *map[int8]uint8:
- v2, changed2 := fastpathTV.DecMapInt8Uint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8Uint8V(*v, true, d); changed2 {
*v = v2
}
case map[int8]uint16:
- fastpathTV.DecMapInt8Uint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8Uint16V(v, false, d)
case *map[int8]uint16:
- v2, changed2 := fastpathTV.DecMapInt8Uint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8Uint16V(*v, true, d); changed2 {
*v = v2
}
case map[int8]uint32:
- fastpathTV.DecMapInt8Uint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8Uint32V(v, false, d)
case *map[int8]uint32:
- v2, changed2 := fastpathTV.DecMapInt8Uint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8Uint32V(*v, true, d); changed2 {
*v = v2
}
case map[int8]uint64:
- fastpathTV.DecMapInt8Uint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8Uint64V(v, false, d)
case *map[int8]uint64:
- v2, changed2 := fastpathTV.DecMapInt8Uint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8Uint64V(*v, true, d); changed2 {
*v = v2
}
case map[int8]uintptr:
- fastpathTV.DecMapInt8UintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8UintptrV(v, false, d)
case *map[int8]uintptr:
- v2, changed2 := fastpathTV.DecMapInt8UintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8UintptrV(*v, true, d); changed2 {
*v = v2
}
case map[int8]int:
- fastpathTV.DecMapInt8IntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8IntV(v, false, d)
case *map[int8]int:
- v2, changed2 := fastpathTV.DecMapInt8IntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8IntV(*v, true, d); changed2 {
*v = v2
}
case map[int8]int8:
- fastpathTV.DecMapInt8Int8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8Int8V(v, false, d)
case *map[int8]int8:
- v2, changed2 := fastpathTV.DecMapInt8Int8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8Int8V(*v, true, d); changed2 {
*v = v2
}
case map[int8]int16:
- fastpathTV.DecMapInt8Int16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8Int16V(v, false, d)
case *map[int8]int16:
- v2, changed2 := fastpathTV.DecMapInt8Int16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8Int16V(*v, true, d); changed2 {
*v = v2
}
case map[int8]int32:
- fastpathTV.DecMapInt8Int32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8Int32V(v, false, d)
case *map[int8]int32:
- v2, changed2 := fastpathTV.DecMapInt8Int32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8Int32V(*v, true, d); changed2 {
*v = v2
}
case map[int8]int64:
- fastpathTV.DecMapInt8Int64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8Int64V(v, false, d)
case *map[int8]int64:
- v2, changed2 := fastpathTV.DecMapInt8Int64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8Int64V(*v, true, d); changed2 {
*v = v2
}
case map[int8]float32:
- fastpathTV.DecMapInt8Float32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8Float32V(v, false, d)
case *map[int8]float32:
- v2, changed2 := fastpathTV.DecMapInt8Float32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8Float32V(*v, true, d); changed2 {
*v = v2
}
case map[int8]float64:
- fastpathTV.DecMapInt8Float64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8Float64V(v, false, d)
case *map[int8]float64:
- v2, changed2 := fastpathTV.DecMapInt8Float64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8Float64V(*v, true, d); changed2 {
*v = v2
}
case map[int8]bool:
- fastpathTV.DecMapInt8BoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt8BoolV(v, false, d)
case *map[int8]bool:
- v2, changed2 := fastpathTV.DecMapInt8BoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt8BoolV(*v, true, d); changed2 {
*v = v2
}
case []int16:
- fastpathTV.DecSliceInt16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecSliceInt16V(v, false, d)
case *[]int16:
- v2, changed2 := fastpathTV.DecSliceInt16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecSliceInt16V(*v, true, d); changed2 {
*v = v2
}
case map[int16]interface{}:
- fastpathTV.DecMapInt16IntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16IntfV(v, false, d)
case *map[int16]interface{}:
- v2, changed2 := fastpathTV.DecMapInt16IntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16IntfV(*v, true, d); changed2 {
*v = v2
}
case map[int16]string:
- fastpathTV.DecMapInt16StringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16StringV(v, false, d)
case *map[int16]string:
- v2, changed2 := fastpathTV.DecMapInt16StringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16StringV(*v, true, d); changed2 {
*v = v2
}
case map[int16]uint:
- fastpathTV.DecMapInt16UintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16UintV(v, false, d)
case *map[int16]uint:
- v2, changed2 := fastpathTV.DecMapInt16UintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16UintV(*v, true, d); changed2 {
*v = v2
}
case map[int16]uint8:
- fastpathTV.DecMapInt16Uint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16Uint8V(v, false, d)
case *map[int16]uint8:
- v2, changed2 := fastpathTV.DecMapInt16Uint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16Uint8V(*v, true, d); changed2 {
*v = v2
}
case map[int16]uint16:
- fastpathTV.DecMapInt16Uint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16Uint16V(v, false, d)
case *map[int16]uint16:
- v2, changed2 := fastpathTV.DecMapInt16Uint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16Uint16V(*v, true, d); changed2 {
*v = v2
}
case map[int16]uint32:
- fastpathTV.DecMapInt16Uint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16Uint32V(v, false, d)
case *map[int16]uint32:
- v2, changed2 := fastpathTV.DecMapInt16Uint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16Uint32V(*v, true, d); changed2 {
*v = v2
}
case map[int16]uint64:
- fastpathTV.DecMapInt16Uint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16Uint64V(v, false, d)
case *map[int16]uint64:
- v2, changed2 := fastpathTV.DecMapInt16Uint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16Uint64V(*v, true, d); changed2 {
*v = v2
}
case map[int16]uintptr:
- fastpathTV.DecMapInt16UintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16UintptrV(v, false, d)
case *map[int16]uintptr:
- v2, changed2 := fastpathTV.DecMapInt16UintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16UintptrV(*v, true, d); changed2 {
*v = v2
}
case map[int16]int:
- fastpathTV.DecMapInt16IntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16IntV(v, false, d)
case *map[int16]int:
- v2, changed2 := fastpathTV.DecMapInt16IntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16IntV(*v, true, d); changed2 {
*v = v2
}
case map[int16]int8:
- fastpathTV.DecMapInt16Int8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16Int8V(v, false, d)
case *map[int16]int8:
- v2, changed2 := fastpathTV.DecMapInt16Int8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16Int8V(*v, true, d); changed2 {
*v = v2
}
case map[int16]int16:
- fastpathTV.DecMapInt16Int16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16Int16V(v, false, d)
case *map[int16]int16:
- v2, changed2 := fastpathTV.DecMapInt16Int16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16Int16V(*v, true, d); changed2 {
*v = v2
}
case map[int16]int32:
- fastpathTV.DecMapInt16Int32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16Int32V(v, false, d)
case *map[int16]int32:
- v2, changed2 := fastpathTV.DecMapInt16Int32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16Int32V(*v, true, d); changed2 {
*v = v2
}
case map[int16]int64:
- fastpathTV.DecMapInt16Int64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16Int64V(v, false, d)
case *map[int16]int64:
- v2, changed2 := fastpathTV.DecMapInt16Int64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16Int64V(*v, true, d); changed2 {
*v = v2
}
case map[int16]float32:
- fastpathTV.DecMapInt16Float32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16Float32V(v, false, d)
case *map[int16]float32:
- v2, changed2 := fastpathTV.DecMapInt16Float32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16Float32V(*v, true, d); changed2 {
*v = v2
}
case map[int16]float64:
- fastpathTV.DecMapInt16Float64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16Float64V(v, false, d)
case *map[int16]float64:
- v2, changed2 := fastpathTV.DecMapInt16Float64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16Float64V(*v, true, d); changed2 {
*v = v2
}
case map[int16]bool:
- fastpathTV.DecMapInt16BoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt16BoolV(v, false, d)
case *map[int16]bool:
- v2, changed2 := fastpathTV.DecMapInt16BoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt16BoolV(*v, true, d); changed2 {
*v = v2
}
case []int32:
- fastpathTV.DecSliceInt32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecSliceInt32V(v, false, d)
case *[]int32:
- v2, changed2 := fastpathTV.DecSliceInt32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecSliceInt32V(*v, true, d); changed2 {
*v = v2
}
case map[int32]interface{}:
- fastpathTV.DecMapInt32IntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32IntfV(v, false, d)
case *map[int32]interface{}:
- v2, changed2 := fastpathTV.DecMapInt32IntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32IntfV(*v, true, d); changed2 {
*v = v2
}
case map[int32]string:
- fastpathTV.DecMapInt32StringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32StringV(v, false, d)
case *map[int32]string:
- v2, changed2 := fastpathTV.DecMapInt32StringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32StringV(*v, true, d); changed2 {
*v = v2
}
case map[int32]uint:
- fastpathTV.DecMapInt32UintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32UintV(v, false, d)
case *map[int32]uint:
- v2, changed2 := fastpathTV.DecMapInt32UintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32UintV(*v, true, d); changed2 {
*v = v2
}
case map[int32]uint8:
- fastpathTV.DecMapInt32Uint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32Uint8V(v, false, d)
case *map[int32]uint8:
- v2, changed2 := fastpathTV.DecMapInt32Uint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32Uint8V(*v, true, d); changed2 {
*v = v2
}
case map[int32]uint16:
- fastpathTV.DecMapInt32Uint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32Uint16V(v, false, d)
case *map[int32]uint16:
- v2, changed2 := fastpathTV.DecMapInt32Uint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32Uint16V(*v, true, d); changed2 {
*v = v2
}
case map[int32]uint32:
- fastpathTV.DecMapInt32Uint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32Uint32V(v, false, d)
case *map[int32]uint32:
- v2, changed2 := fastpathTV.DecMapInt32Uint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32Uint32V(*v, true, d); changed2 {
*v = v2
}
case map[int32]uint64:
- fastpathTV.DecMapInt32Uint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32Uint64V(v, false, d)
case *map[int32]uint64:
- v2, changed2 := fastpathTV.DecMapInt32Uint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32Uint64V(*v, true, d); changed2 {
*v = v2
}
case map[int32]uintptr:
- fastpathTV.DecMapInt32UintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32UintptrV(v, false, d)
case *map[int32]uintptr:
- v2, changed2 := fastpathTV.DecMapInt32UintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32UintptrV(*v, true, d); changed2 {
*v = v2
}
case map[int32]int:
- fastpathTV.DecMapInt32IntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32IntV(v, false, d)
case *map[int32]int:
- v2, changed2 := fastpathTV.DecMapInt32IntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32IntV(*v, true, d); changed2 {
*v = v2
}
case map[int32]int8:
- fastpathTV.DecMapInt32Int8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32Int8V(v, false, d)
case *map[int32]int8:
- v2, changed2 := fastpathTV.DecMapInt32Int8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32Int8V(*v, true, d); changed2 {
*v = v2
}
case map[int32]int16:
- fastpathTV.DecMapInt32Int16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32Int16V(v, false, d)
case *map[int32]int16:
- v2, changed2 := fastpathTV.DecMapInt32Int16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32Int16V(*v, true, d); changed2 {
*v = v2
}
case map[int32]int32:
- fastpathTV.DecMapInt32Int32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32Int32V(v, false, d)
case *map[int32]int32:
- v2, changed2 := fastpathTV.DecMapInt32Int32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32Int32V(*v, true, d); changed2 {
*v = v2
}
case map[int32]int64:
- fastpathTV.DecMapInt32Int64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32Int64V(v, false, d)
case *map[int32]int64:
- v2, changed2 := fastpathTV.DecMapInt32Int64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32Int64V(*v, true, d); changed2 {
*v = v2
}
case map[int32]float32:
- fastpathTV.DecMapInt32Float32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32Float32V(v, false, d)
case *map[int32]float32:
- v2, changed2 := fastpathTV.DecMapInt32Float32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32Float32V(*v, true, d); changed2 {
*v = v2
}
case map[int32]float64:
- fastpathTV.DecMapInt32Float64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32Float64V(v, false, d)
case *map[int32]float64:
- v2, changed2 := fastpathTV.DecMapInt32Float64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32Float64V(*v, true, d); changed2 {
*v = v2
}
case map[int32]bool:
- fastpathTV.DecMapInt32BoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt32BoolV(v, false, d)
case *map[int32]bool:
- v2, changed2 := fastpathTV.DecMapInt32BoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt32BoolV(*v, true, d); changed2 {
*v = v2
}
case []int64:
- fastpathTV.DecSliceInt64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecSliceInt64V(v, false, d)
case *[]int64:
- v2, changed2 := fastpathTV.DecSliceInt64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecSliceInt64V(*v, true, d); changed2 {
*v = v2
}
case map[int64]interface{}:
- fastpathTV.DecMapInt64IntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64IntfV(v, false, d)
case *map[int64]interface{}:
- v2, changed2 := fastpathTV.DecMapInt64IntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64IntfV(*v, true, d); changed2 {
*v = v2
}
case map[int64]string:
- fastpathTV.DecMapInt64StringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64StringV(v, false, d)
case *map[int64]string:
- v2, changed2 := fastpathTV.DecMapInt64StringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64StringV(*v, true, d); changed2 {
*v = v2
}
case map[int64]uint:
- fastpathTV.DecMapInt64UintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64UintV(v, false, d)
case *map[int64]uint:
- v2, changed2 := fastpathTV.DecMapInt64UintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64UintV(*v, true, d); changed2 {
*v = v2
}
case map[int64]uint8:
- fastpathTV.DecMapInt64Uint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64Uint8V(v, false, d)
case *map[int64]uint8:
- v2, changed2 := fastpathTV.DecMapInt64Uint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64Uint8V(*v, true, d); changed2 {
*v = v2
}
case map[int64]uint16:
- fastpathTV.DecMapInt64Uint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64Uint16V(v, false, d)
case *map[int64]uint16:
- v2, changed2 := fastpathTV.DecMapInt64Uint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64Uint16V(*v, true, d); changed2 {
*v = v2
}
case map[int64]uint32:
- fastpathTV.DecMapInt64Uint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64Uint32V(v, false, d)
case *map[int64]uint32:
- v2, changed2 := fastpathTV.DecMapInt64Uint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64Uint32V(*v, true, d); changed2 {
*v = v2
}
case map[int64]uint64:
- fastpathTV.DecMapInt64Uint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64Uint64V(v, false, d)
case *map[int64]uint64:
- v2, changed2 := fastpathTV.DecMapInt64Uint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64Uint64V(*v, true, d); changed2 {
*v = v2
}
case map[int64]uintptr:
- fastpathTV.DecMapInt64UintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64UintptrV(v, false, d)
case *map[int64]uintptr:
- v2, changed2 := fastpathTV.DecMapInt64UintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64UintptrV(*v, true, d); changed2 {
*v = v2
}
case map[int64]int:
- fastpathTV.DecMapInt64IntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64IntV(v, false, d)
case *map[int64]int:
- v2, changed2 := fastpathTV.DecMapInt64IntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64IntV(*v, true, d); changed2 {
*v = v2
}
case map[int64]int8:
- fastpathTV.DecMapInt64Int8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64Int8V(v, false, d)
case *map[int64]int8:
- v2, changed2 := fastpathTV.DecMapInt64Int8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64Int8V(*v, true, d); changed2 {
*v = v2
}
case map[int64]int16:
- fastpathTV.DecMapInt64Int16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64Int16V(v, false, d)
case *map[int64]int16:
- v2, changed2 := fastpathTV.DecMapInt64Int16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64Int16V(*v, true, d); changed2 {
*v = v2
}
case map[int64]int32:
- fastpathTV.DecMapInt64Int32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64Int32V(v, false, d)
case *map[int64]int32:
- v2, changed2 := fastpathTV.DecMapInt64Int32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64Int32V(*v, true, d); changed2 {
*v = v2
}
case map[int64]int64:
- fastpathTV.DecMapInt64Int64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64Int64V(v, false, d)
case *map[int64]int64:
- v2, changed2 := fastpathTV.DecMapInt64Int64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64Int64V(*v, true, d); changed2 {
*v = v2
}
case map[int64]float32:
- fastpathTV.DecMapInt64Float32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64Float32V(v, false, d)
case *map[int64]float32:
- v2, changed2 := fastpathTV.DecMapInt64Float32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64Float32V(*v, true, d); changed2 {
*v = v2
}
case map[int64]float64:
- fastpathTV.DecMapInt64Float64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64Float64V(v, false, d)
case *map[int64]float64:
- v2, changed2 := fastpathTV.DecMapInt64Float64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64Float64V(*v, true, d); changed2 {
*v = v2
}
case map[int64]bool:
- fastpathTV.DecMapInt64BoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapInt64BoolV(v, false, d)
case *map[int64]bool:
- v2, changed2 := fastpathTV.DecMapInt64BoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapInt64BoolV(*v, true, d); changed2 {
*v = v2
}
case []bool:
- fastpathTV.DecSliceBoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecSliceBoolV(v, false, d)
case *[]bool:
- v2, changed2 := fastpathTV.DecSliceBoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecSliceBoolV(*v, true, d); changed2 {
*v = v2
}
case map[bool]interface{}:
- fastpathTV.DecMapBoolIntfV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolIntfV(v, false, d)
case *map[bool]interface{}:
- v2, changed2 := fastpathTV.DecMapBoolIntfV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolIntfV(*v, true, d); changed2 {
*v = v2
}
case map[bool]string:
- fastpathTV.DecMapBoolStringV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolStringV(v, false, d)
case *map[bool]string:
- v2, changed2 := fastpathTV.DecMapBoolStringV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolStringV(*v, true, d); changed2 {
*v = v2
}
case map[bool]uint:
- fastpathTV.DecMapBoolUintV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolUintV(v, false, d)
case *map[bool]uint:
- v2, changed2 := fastpathTV.DecMapBoolUintV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolUintV(*v, true, d); changed2 {
*v = v2
}
case map[bool]uint8:
- fastpathTV.DecMapBoolUint8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolUint8V(v, false, d)
case *map[bool]uint8:
- v2, changed2 := fastpathTV.DecMapBoolUint8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolUint8V(*v, true, d); changed2 {
*v = v2
}
case map[bool]uint16:
- fastpathTV.DecMapBoolUint16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolUint16V(v, false, d)
case *map[bool]uint16:
- v2, changed2 := fastpathTV.DecMapBoolUint16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolUint16V(*v, true, d); changed2 {
*v = v2
}
case map[bool]uint32:
- fastpathTV.DecMapBoolUint32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolUint32V(v, false, d)
case *map[bool]uint32:
- v2, changed2 := fastpathTV.DecMapBoolUint32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolUint32V(*v, true, d); changed2 {
*v = v2
}
case map[bool]uint64:
- fastpathTV.DecMapBoolUint64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolUint64V(v, false, d)
case *map[bool]uint64:
- v2, changed2 := fastpathTV.DecMapBoolUint64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolUint64V(*v, true, d); changed2 {
*v = v2
}
case map[bool]uintptr:
- fastpathTV.DecMapBoolUintptrV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolUintptrV(v, false, d)
case *map[bool]uintptr:
- v2, changed2 := fastpathTV.DecMapBoolUintptrV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolUintptrV(*v, true, d); changed2 {
*v = v2
}
case map[bool]int:
- fastpathTV.DecMapBoolIntV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolIntV(v, false, d)
case *map[bool]int:
- v2, changed2 := fastpathTV.DecMapBoolIntV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolIntV(*v, true, d); changed2 {
*v = v2
}
case map[bool]int8:
- fastpathTV.DecMapBoolInt8V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolInt8V(v, false, d)
case *map[bool]int8:
- v2, changed2 := fastpathTV.DecMapBoolInt8V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolInt8V(*v, true, d); changed2 {
*v = v2
}
case map[bool]int16:
- fastpathTV.DecMapBoolInt16V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolInt16V(v, false, d)
case *map[bool]int16:
- v2, changed2 := fastpathTV.DecMapBoolInt16V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolInt16V(*v, true, d); changed2 {
*v = v2
}
case map[bool]int32:
- fastpathTV.DecMapBoolInt32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolInt32V(v, false, d)
case *map[bool]int32:
- v2, changed2 := fastpathTV.DecMapBoolInt32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolInt32V(*v, true, d); changed2 {
*v = v2
}
case map[bool]int64:
- fastpathTV.DecMapBoolInt64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolInt64V(v, false, d)
case *map[bool]int64:
- v2, changed2 := fastpathTV.DecMapBoolInt64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolInt64V(*v, true, d); changed2 {
*v = v2
}
case map[bool]float32:
- fastpathTV.DecMapBoolFloat32V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolFloat32V(v, false, d)
case *map[bool]float32:
- v2, changed2 := fastpathTV.DecMapBoolFloat32V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolFloat32V(*v, true, d); changed2 {
*v = v2
}
case map[bool]float64:
- fastpathTV.DecMapBoolFloat64V(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolFloat64V(v, false, d)
case *map[bool]float64:
- v2, changed2 := fastpathTV.DecMapBoolFloat64V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolFloat64V(*v, true, d); changed2 {
*v = v2
}
case map[bool]bool:
- fastpathTV.DecMapBoolBoolV(v, fastpathCheckNilFalse, false, d)
+ fastpathTV.DecMapBoolBoolV(v, false, d)
case *map[bool]bool:
- v2, changed2 := fastpathTV.DecMapBoolBoolV(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ if v2, changed2 := fastpathTV.DecMapBoolBoolV(*v, true, d); changed2 {
*v = v2
}
@@ -17669,38 +15851,850 @@ func fastpathDecodeTypeSwitch(iv interface{}, d *Decoder) bool {
return true
}
+func fastpathDecodeSetZeroTypeSwitch(iv interface{}, d *Decoder) bool {
+ switch v := iv.(type) {
+
+ case *[]interface{}:
+ *v = nil
+
+ case *map[interface{}]interface{}:
+ *v = nil
+
+ case *map[interface{}]string:
+ *v = nil
+
+ case *map[interface{}]uint:
+ *v = nil
+
+ case *map[interface{}]uint8:
+ *v = nil
+
+ case *map[interface{}]uint16:
+ *v = nil
+
+ case *map[interface{}]uint32:
+ *v = nil
+
+ case *map[interface{}]uint64:
+ *v = nil
+
+ case *map[interface{}]uintptr:
+ *v = nil
+
+ case *map[interface{}]int:
+ *v = nil
+
+ case *map[interface{}]int8:
+ *v = nil
+
+ case *map[interface{}]int16:
+ *v = nil
+
+ case *map[interface{}]int32:
+ *v = nil
+
+ case *map[interface{}]int64:
+ *v = nil
+
+ case *map[interface{}]float32:
+ *v = nil
+
+ case *map[interface{}]float64:
+ *v = nil
+
+ case *map[interface{}]bool:
+ *v = nil
+
+ case *[]string:
+ *v = nil
+
+ case *map[string]interface{}:
+ *v = nil
+
+ case *map[string]string:
+ *v = nil
+
+ case *map[string]uint:
+ *v = nil
+
+ case *map[string]uint8:
+ *v = nil
+
+ case *map[string]uint16:
+ *v = nil
+
+ case *map[string]uint32:
+ *v = nil
+
+ case *map[string]uint64:
+ *v = nil
+
+ case *map[string]uintptr:
+ *v = nil
+
+ case *map[string]int:
+ *v = nil
+
+ case *map[string]int8:
+ *v = nil
+
+ case *map[string]int16:
+ *v = nil
+
+ case *map[string]int32:
+ *v = nil
+
+ case *map[string]int64:
+ *v = nil
+
+ case *map[string]float32:
+ *v = nil
+
+ case *map[string]float64:
+ *v = nil
+
+ case *map[string]bool:
+ *v = nil
+
+ case *[]float32:
+ *v = nil
+
+ case *map[float32]interface{}:
+ *v = nil
+
+ case *map[float32]string:
+ *v = nil
+
+ case *map[float32]uint:
+ *v = nil
+
+ case *map[float32]uint8:
+ *v = nil
+
+ case *map[float32]uint16:
+ *v = nil
+
+ case *map[float32]uint32:
+ *v = nil
+
+ case *map[float32]uint64:
+ *v = nil
+
+ case *map[float32]uintptr:
+ *v = nil
+
+ case *map[float32]int:
+ *v = nil
+
+ case *map[float32]int8:
+ *v = nil
+
+ case *map[float32]int16:
+ *v = nil
+
+ case *map[float32]int32:
+ *v = nil
+
+ case *map[float32]int64:
+ *v = nil
+
+ case *map[float32]float32:
+ *v = nil
+
+ case *map[float32]float64:
+ *v = nil
+
+ case *map[float32]bool:
+ *v = nil
+
+ case *[]float64:
+ *v = nil
+
+ case *map[float64]interface{}:
+ *v = nil
+
+ case *map[float64]string:
+ *v = nil
+
+ case *map[float64]uint:
+ *v = nil
+
+ case *map[float64]uint8:
+ *v = nil
+
+ case *map[float64]uint16:
+ *v = nil
+
+ case *map[float64]uint32:
+ *v = nil
+
+ case *map[float64]uint64:
+ *v = nil
+
+ case *map[float64]uintptr:
+ *v = nil
+
+ case *map[float64]int:
+ *v = nil
+
+ case *map[float64]int8:
+ *v = nil
+
+ case *map[float64]int16:
+ *v = nil
+
+ case *map[float64]int32:
+ *v = nil
+
+ case *map[float64]int64:
+ *v = nil
+
+ case *map[float64]float32:
+ *v = nil
+
+ case *map[float64]float64:
+ *v = nil
+
+ case *map[float64]bool:
+ *v = nil
+
+ case *[]uint:
+ *v = nil
+
+ case *map[uint]interface{}:
+ *v = nil
+
+ case *map[uint]string:
+ *v = nil
+
+ case *map[uint]uint:
+ *v = nil
+
+ case *map[uint]uint8:
+ *v = nil
+
+ case *map[uint]uint16:
+ *v = nil
+
+ case *map[uint]uint32:
+ *v = nil
+
+ case *map[uint]uint64:
+ *v = nil
+
+ case *map[uint]uintptr:
+ *v = nil
+
+ case *map[uint]int:
+ *v = nil
+
+ case *map[uint]int8:
+ *v = nil
+
+ case *map[uint]int16:
+ *v = nil
+
+ case *map[uint]int32:
+ *v = nil
+
+ case *map[uint]int64:
+ *v = nil
+
+ case *map[uint]float32:
+ *v = nil
+
+ case *map[uint]float64:
+ *v = nil
+
+ case *map[uint]bool:
+ *v = nil
+
+ case *map[uint8]interface{}:
+ *v = nil
+
+ case *map[uint8]string:
+ *v = nil
+
+ case *map[uint8]uint:
+ *v = nil
+
+ case *map[uint8]uint8:
+ *v = nil
+
+ case *map[uint8]uint16:
+ *v = nil
+
+ case *map[uint8]uint32:
+ *v = nil
+
+ case *map[uint8]uint64:
+ *v = nil
+
+ case *map[uint8]uintptr:
+ *v = nil
+
+ case *map[uint8]int:
+ *v = nil
+
+ case *map[uint8]int8:
+ *v = nil
+
+ case *map[uint8]int16:
+ *v = nil
+
+ case *map[uint8]int32:
+ *v = nil
+
+ case *map[uint8]int64:
+ *v = nil
+
+ case *map[uint8]float32:
+ *v = nil
+
+ case *map[uint8]float64:
+ *v = nil
+
+ case *map[uint8]bool:
+ *v = nil
+
+ case *[]uint16:
+ *v = nil
+
+ case *map[uint16]interface{}:
+ *v = nil
+
+ case *map[uint16]string:
+ *v = nil
+
+ case *map[uint16]uint:
+ *v = nil
+
+ case *map[uint16]uint8:
+ *v = nil
+
+ case *map[uint16]uint16:
+ *v = nil
+
+ case *map[uint16]uint32:
+ *v = nil
+
+ case *map[uint16]uint64:
+ *v = nil
+
+ case *map[uint16]uintptr:
+ *v = nil
+
+ case *map[uint16]int:
+ *v = nil
+
+ case *map[uint16]int8:
+ *v = nil
+
+ case *map[uint16]int16:
+ *v = nil
+
+ case *map[uint16]int32:
+ *v = nil
+
+ case *map[uint16]int64:
+ *v = nil
+
+ case *map[uint16]float32:
+ *v = nil
+
+ case *map[uint16]float64:
+ *v = nil
+
+ case *map[uint16]bool:
+ *v = nil
+
+ case *[]uint32:
+ *v = nil
+
+ case *map[uint32]interface{}:
+ *v = nil
+
+ case *map[uint32]string:
+ *v = nil
+
+ case *map[uint32]uint:
+ *v = nil
+
+ case *map[uint32]uint8:
+ *v = nil
+
+ case *map[uint32]uint16:
+ *v = nil
+
+ case *map[uint32]uint32:
+ *v = nil
+
+ case *map[uint32]uint64:
+ *v = nil
+
+ case *map[uint32]uintptr:
+ *v = nil
+
+ case *map[uint32]int:
+ *v = nil
+
+ case *map[uint32]int8:
+ *v = nil
+
+ case *map[uint32]int16:
+ *v = nil
+
+ case *map[uint32]int32:
+ *v = nil
+
+ case *map[uint32]int64:
+ *v = nil
+
+ case *map[uint32]float32:
+ *v = nil
+
+ case *map[uint32]float64:
+ *v = nil
+
+ case *map[uint32]bool:
+ *v = nil
+
+ case *[]uint64:
+ *v = nil
+
+ case *map[uint64]interface{}:
+ *v = nil
+
+ case *map[uint64]string:
+ *v = nil
+
+ case *map[uint64]uint:
+ *v = nil
+
+ case *map[uint64]uint8:
+ *v = nil
+
+ case *map[uint64]uint16:
+ *v = nil
+
+ case *map[uint64]uint32:
+ *v = nil
+
+ case *map[uint64]uint64:
+ *v = nil
+
+ case *map[uint64]uintptr:
+ *v = nil
+
+ case *map[uint64]int:
+ *v = nil
+
+ case *map[uint64]int8:
+ *v = nil
+
+ case *map[uint64]int16:
+ *v = nil
+
+ case *map[uint64]int32:
+ *v = nil
+
+ case *map[uint64]int64:
+ *v = nil
+
+ case *map[uint64]float32:
+ *v = nil
+
+ case *map[uint64]float64:
+ *v = nil
+
+ case *map[uint64]bool:
+ *v = nil
+
+ case *[]uintptr:
+ *v = nil
+
+ case *map[uintptr]interface{}:
+ *v = nil
+
+ case *map[uintptr]string:
+ *v = nil
+
+ case *map[uintptr]uint:
+ *v = nil
+
+ case *map[uintptr]uint8:
+ *v = nil
+
+ case *map[uintptr]uint16:
+ *v = nil
+
+ case *map[uintptr]uint32:
+ *v = nil
+
+ case *map[uintptr]uint64:
+ *v = nil
+
+ case *map[uintptr]uintptr:
+ *v = nil
+
+ case *map[uintptr]int:
+ *v = nil
+
+ case *map[uintptr]int8:
+ *v = nil
+
+ case *map[uintptr]int16:
+ *v = nil
+
+ case *map[uintptr]int32:
+ *v = nil
+
+ case *map[uintptr]int64:
+ *v = nil
+
+ case *map[uintptr]float32:
+ *v = nil
+
+ case *map[uintptr]float64:
+ *v = nil
+
+ case *map[uintptr]bool:
+ *v = nil
+
+ case *[]int:
+ *v = nil
+
+ case *map[int]interface{}:
+ *v = nil
+
+ case *map[int]string:
+ *v = nil
+
+ case *map[int]uint:
+ *v = nil
+
+ case *map[int]uint8:
+ *v = nil
+
+ case *map[int]uint16:
+ *v = nil
+
+ case *map[int]uint32:
+ *v = nil
+
+ case *map[int]uint64:
+ *v = nil
+
+ case *map[int]uintptr:
+ *v = nil
+
+ case *map[int]int:
+ *v = nil
+
+ case *map[int]int8:
+ *v = nil
+
+ case *map[int]int16:
+ *v = nil
+
+ case *map[int]int32:
+ *v = nil
+
+ case *map[int]int64:
+ *v = nil
+
+ case *map[int]float32:
+ *v = nil
+
+ case *map[int]float64:
+ *v = nil
+
+ case *map[int]bool:
+ *v = nil
+
+ case *[]int8:
+ *v = nil
+
+ case *map[int8]interface{}:
+ *v = nil
+
+ case *map[int8]string:
+ *v = nil
+
+ case *map[int8]uint:
+ *v = nil
+
+ case *map[int8]uint8:
+ *v = nil
+
+ case *map[int8]uint16:
+ *v = nil
+
+ case *map[int8]uint32:
+ *v = nil
+
+ case *map[int8]uint64:
+ *v = nil
+
+ case *map[int8]uintptr:
+ *v = nil
+
+ case *map[int8]int:
+ *v = nil
+
+ case *map[int8]int8:
+ *v = nil
+
+ case *map[int8]int16:
+ *v = nil
+
+ case *map[int8]int32:
+ *v = nil
+
+ case *map[int8]int64:
+ *v = nil
+
+ case *map[int8]float32:
+ *v = nil
+
+ case *map[int8]float64:
+ *v = nil
+
+ case *map[int8]bool:
+ *v = nil
+
+ case *[]int16:
+ *v = nil
+
+ case *map[int16]interface{}:
+ *v = nil
+
+ case *map[int16]string:
+ *v = nil
+
+ case *map[int16]uint:
+ *v = nil
+
+ case *map[int16]uint8:
+ *v = nil
+
+ case *map[int16]uint16:
+ *v = nil
+
+ case *map[int16]uint32:
+ *v = nil
+
+ case *map[int16]uint64:
+ *v = nil
+
+ case *map[int16]uintptr:
+ *v = nil
+
+ case *map[int16]int:
+ *v = nil
+
+ case *map[int16]int8:
+ *v = nil
+
+ case *map[int16]int16:
+ *v = nil
+
+ case *map[int16]int32:
+ *v = nil
+
+ case *map[int16]int64:
+ *v = nil
+
+ case *map[int16]float32:
+ *v = nil
+
+ case *map[int16]float64:
+ *v = nil
+
+ case *map[int16]bool:
+ *v = nil
+
+ case *[]int32:
+ *v = nil
+
+ case *map[int32]interface{}:
+ *v = nil
+
+ case *map[int32]string:
+ *v = nil
+
+ case *map[int32]uint:
+ *v = nil
+
+ case *map[int32]uint8:
+ *v = nil
+
+ case *map[int32]uint16:
+ *v = nil
+
+ case *map[int32]uint32:
+ *v = nil
+
+ case *map[int32]uint64:
+ *v = nil
+
+ case *map[int32]uintptr:
+ *v = nil
+
+ case *map[int32]int:
+ *v = nil
+
+ case *map[int32]int8:
+ *v = nil
+
+ case *map[int32]int16:
+ *v = nil
+
+ case *map[int32]int32:
+ *v = nil
+
+ case *map[int32]int64:
+ *v = nil
+
+ case *map[int32]float32:
+ *v = nil
+
+ case *map[int32]float64:
+ *v = nil
+
+ case *map[int32]bool:
+ *v = nil
+
+ case *[]int64:
+ *v = nil
+
+ case *map[int64]interface{}:
+ *v = nil
+
+ case *map[int64]string:
+ *v = nil
+
+ case *map[int64]uint:
+ *v = nil
+
+ case *map[int64]uint8:
+ *v = nil
+
+ case *map[int64]uint16:
+ *v = nil
+
+ case *map[int64]uint32:
+ *v = nil
+
+ case *map[int64]uint64:
+ *v = nil
+
+ case *map[int64]uintptr:
+ *v = nil
+
+ case *map[int64]int:
+ *v = nil
+
+ case *map[int64]int8:
+ *v = nil
+
+ case *map[int64]int16:
+ *v = nil
+
+ case *map[int64]int32:
+ *v = nil
+
+ case *map[int64]int64:
+ *v = nil
+
+ case *map[int64]float32:
+ *v = nil
+
+ case *map[int64]float64:
+ *v = nil
+
+ case *map[int64]bool:
+ *v = nil
+
+ case *[]bool:
+ *v = nil
+
+ case *map[bool]interface{}:
+ *v = nil
+
+ case *map[bool]string:
+ *v = nil
+
+ case *map[bool]uint:
+ *v = nil
+
+ case *map[bool]uint8:
+ *v = nil
+
+ case *map[bool]uint16:
+ *v = nil
+
+ case *map[bool]uint32:
+ *v = nil
+
+ case *map[bool]uint64:
+ *v = nil
+
+ case *map[bool]uintptr:
+ *v = nil
+
+ case *map[bool]int:
+ *v = nil
+
+ case *map[bool]int8:
+ *v = nil
+
+ case *map[bool]int16:
+ *v = nil
+
+ case *map[bool]int32:
+ *v = nil
+
+ case *map[bool]int64:
+ *v = nil
+
+ case *map[bool]float32:
+ *v = nil
+
+ case *map[bool]float64:
+ *v = nil
+
+ case *map[bool]bool:
+ *v = nil
+
+ default:
+ _ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release)
+ return false
+ }
+ return true
+}
+
// -- -- fast path functions
-func (f *decFnInfo) fastpathDecSliceIntfR(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() {
- vp := rv.Addr().Interface().(*[]interface{})
- v, changed := fastpathTV.DecSliceIntfV(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
+func (d *Decoder) fastpathDecSliceIntfR(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]interface{})
+ if v, changed := fastpathTV.DecSliceIntfV(*vp, !array, d); changed {
*vp = v
}
} else {
- v := rv.Interface().([]interface{})
- fastpathTV.DecSliceIntfV(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.DecSliceIntfV(rv2i(rv).([]interface{}), !array, d)
}
}
-func (f fastpathT) DecSliceIntfX(vp *[]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecSliceIntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecSliceIntfX(vp *[]interface{}, d *Decoder) {
+ if v, changed := f.DecSliceIntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecSliceIntfV(v []interface{}, checkNil bool, canChange bool, d *Decoder) (_ []interface{}, changed bool) {
+func (_ fastpathT) DecSliceIntfV(v []interface{}, canChange bool, d *Decoder) (_ []interface{}, changed bool) {
dd := d.d
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
@@ -17715,126 +16709,83 @@ func (_ fastpathT) DecSliceIntfV(v []interface{}, checkNil bool, canChange bool,
return v, changed
}
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange {
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 16)
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]interface{}, xlen)
- }
- } else {
- v = make([]interface{}, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16)
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]interface{}, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- }
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- d.decode(&v[j])
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc {
- for ; j < containerLenS; j++ {
- v = append(v, nil)
- slh.ElemContainerState(j)
- d.decode(&v[j])
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16)
+ } else {
+ xlen = 8
}
+ v = make([]interface{}, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak()
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []interface{}{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, nil)
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]interface{}, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, nil)
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) {
- d.decode(&v[j])
-
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ d.decode(&v[j])
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]interface{}, 0)
+ changed = true
}
}
slh.End()
return v, changed
}
-func (f *decFnInfo) fastpathDecSliceStringR(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() {
- vp := rv.Addr().Interface().(*[]string)
- v, changed := fastpathTV.DecSliceStringV(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
+func (d *Decoder) fastpathDecSliceStringR(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]string)
+ if v, changed := fastpathTV.DecSliceStringV(*vp, !array, d); changed {
*vp = v
}
} else {
- v := rv.Interface().([]string)
- fastpathTV.DecSliceStringV(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.DecSliceStringV(rv2i(rv).([]string), !array, d)
}
}
-func (f fastpathT) DecSliceStringX(vp *[]string, checkNil bool, d *Decoder) {
- v, changed := f.DecSliceStringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecSliceStringX(vp *[]string, d *Decoder) {
+ if v, changed := f.DecSliceStringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecSliceStringV(v []string, checkNil bool, canChange bool, d *Decoder) (_ []string, changed bool) {
+func (_ fastpathT) DecSliceStringV(v []string, canChange bool, d *Decoder) (_ []string, changed bool) {
dd := d.d
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
@@ -17849,125 +16800,83 @@ func (_ fastpathT) DecSliceStringV(v []string, checkNil bool, canChange bool, d
return v, changed
}
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange {
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 16)
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]string, xlen)
- }
- } else {
- v = make([]string, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16)
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]string, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- }
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- v[j] = dd.DecodeString()
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc {
- for ; j < containerLenS; j++ {
- v = append(v, "")
- slh.ElemContainerState(j)
- v[j] = dd.DecodeString()
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16)
+ } else {
+ xlen = 8
}
+ v = make([]string, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak()
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []string{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, "")
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]string, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, "")
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) {
- v[j] = dd.DecodeString()
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ v[j] = dd.DecodeString()
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]string, 0)
+ changed = true
}
}
slh.End()
return v, changed
}
-func (f *decFnInfo) fastpathDecSliceFloat32R(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() {
- vp := rv.Addr().Interface().(*[]float32)
- v, changed := fastpathTV.DecSliceFloat32V(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
+func (d *Decoder) fastpathDecSliceFloat32R(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]float32)
+ if v, changed := fastpathTV.DecSliceFloat32V(*vp, !array, d); changed {
*vp = v
}
} else {
- v := rv.Interface().([]float32)
- fastpathTV.DecSliceFloat32V(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.DecSliceFloat32V(rv2i(rv).([]float32), !array, d)
}
}
-func (f fastpathT) DecSliceFloat32X(vp *[]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecSliceFloat32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecSliceFloat32X(vp *[]float32, d *Decoder) {
+ if v, changed := f.DecSliceFloat32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecSliceFloat32V(v []float32, checkNil bool, canChange bool, d *Decoder) (_ []float32, changed bool) {
+func (_ fastpathT) DecSliceFloat32V(v []float32, canChange bool, d *Decoder) (_ []float32, changed bool) {
dd := d.d
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
@@ -17982,125 +16891,83 @@ func (_ fastpathT) DecSliceFloat32V(v []float32, checkNil bool, canChange bool,
return v, changed
}
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange {
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 4)
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]float32, xlen)
- }
- } else {
- v = make([]float32, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4)
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]float32, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- }
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- v[j] = float32(dd.DecodeFloat(true))
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc {
- for ; j < containerLenS; j++ {
- v = append(v, 0)
- slh.ElemContainerState(j)
- v[j] = float32(dd.DecodeFloat(true))
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4)
+ } else {
+ xlen = 8
}
+ v = make([]float32, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak()
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []float32{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, 0)
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]float32, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, 0)
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) {
- v[j] = float32(dd.DecodeFloat(true))
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ v[j] = float32(dd.DecodeFloat(true))
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]float32, 0)
+ changed = true
}
}
slh.End()
return v, changed
}
-func (f *decFnInfo) fastpathDecSliceFloat64R(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() {
- vp := rv.Addr().Interface().(*[]float64)
- v, changed := fastpathTV.DecSliceFloat64V(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
+func (d *Decoder) fastpathDecSliceFloat64R(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]float64)
+ if v, changed := fastpathTV.DecSliceFloat64V(*vp, !array, d); changed {
*vp = v
}
} else {
- v := rv.Interface().([]float64)
- fastpathTV.DecSliceFloat64V(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.DecSliceFloat64V(rv2i(rv).([]float64), !array, d)
}
}
-func (f fastpathT) DecSliceFloat64X(vp *[]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecSliceFloat64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecSliceFloat64X(vp *[]float64, d *Decoder) {
+ if v, changed := f.DecSliceFloat64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecSliceFloat64V(v []float64, checkNil bool, canChange bool, d *Decoder) (_ []float64, changed bool) {
+func (_ fastpathT) DecSliceFloat64V(v []float64, canChange bool, d *Decoder) (_ []float64, changed bool) {
dd := d.d
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
@@ -18115,125 +16982,83 @@ func (_ fastpathT) DecSliceFloat64V(v []float64, checkNil bool, canChange bool,
return v, changed
}
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange {
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8)
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]float64, xlen)
- }
- } else {
- v = make([]float64, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]float64, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- }
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- v[j] = dd.DecodeFloat(false)
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc {
- for ; j < containerLenS; j++ {
- v = append(v, 0)
- slh.ElemContainerState(j)
- v[j] = dd.DecodeFloat(false)
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
+ } else {
+ xlen = 8
}
+ v = make([]float64, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak()
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []float64{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, 0)
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]float64, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, 0)
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) {
- v[j] = dd.DecodeFloat(false)
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ v[j] = dd.DecodeFloat(false)
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]float64, 0)
+ changed = true
}
}
slh.End()
return v, changed
}
-func (f *decFnInfo) fastpathDecSliceUintR(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() {
- vp := rv.Addr().Interface().(*[]uint)
- v, changed := fastpathTV.DecSliceUintV(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
+func (d *Decoder) fastpathDecSliceUintR(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]uint)
+ if v, changed := fastpathTV.DecSliceUintV(*vp, !array, d); changed {
*vp = v
}
} else {
- v := rv.Interface().([]uint)
- fastpathTV.DecSliceUintV(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.DecSliceUintV(rv2i(rv).([]uint), !array, d)
}
}
-func (f fastpathT) DecSliceUintX(vp *[]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecSliceUintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecSliceUintX(vp *[]uint, d *Decoder) {
+ if v, changed := f.DecSliceUintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecSliceUintV(v []uint, checkNil bool, canChange bool, d *Decoder) (_ []uint, changed bool) {
+func (_ fastpathT) DecSliceUintV(v []uint, canChange bool, d *Decoder) (_ []uint, changed bool) {
dd := d.d
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
@@ -18248,125 +17073,83 @@ func (_ fastpathT) DecSliceUintV(v []uint, checkNil bool, canChange bool, d *Dec
return v, changed
}
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange {
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8)
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]uint, xlen)
- }
- } else {
- v = make([]uint, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]uint, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- }
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- v[j] = uint(dd.DecodeUint(uintBitsize))
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc {
- for ; j < containerLenS; j++ {
- v = append(v, 0)
- slh.ElemContainerState(j)
- v[j] = uint(dd.DecodeUint(uintBitsize))
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
+ } else {
+ xlen = 8
}
+ v = make([]uint, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak()
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []uint{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, 0)
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]uint, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, 0)
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) {
- v[j] = uint(dd.DecodeUint(uintBitsize))
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ v[j] = uint(dd.DecodeUint(uintBitsize))
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]uint, 0)
+ changed = true
}
}
slh.End()
return v, changed
}
-func (f *decFnInfo) fastpathDecSliceUint16R(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() {
- vp := rv.Addr().Interface().(*[]uint16)
- v, changed := fastpathTV.DecSliceUint16V(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
+func (d *Decoder) fastpathDecSliceUint16R(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]uint16)
+ if v, changed := fastpathTV.DecSliceUint16V(*vp, !array, d); changed {
*vp = v
}
} else {
- v := rv.Interface().([]uint16)
- fastpathTV.DecSliceUint16V(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.DecSliceUint16V(rv2i(rv).([]uint16), !array, d)
}
}
-func (f fastpathT) DecSliceUint16X(vp *[]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecSliceUint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecSliceUint16X(vp *[]uint16, d *Decoder) {
+ if v, changed := f.DecSliceUint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecSliceUint16V(v []uint16, checkNil bool, canChange bool, d *Decoder) (_ []uint16, changed bool) {
+func (_ fastpathT) DecSliceUint16V(v []uint16, canChange bool, d *Decoder) (_ []uint16, changed bool) {
dd := d.d
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
@@ -18381,125 +17164,83 @@ func (_ fastpathT) DecSliceUint16V(v []uint16, checkNil bool, canChange bool, d
return v, changed
}
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange {
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 2)
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]uint16, xlen)
- }
- } else {
- v = make([]uint16, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 2)
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]uint16, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- }
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- v[j] = uint16(dd.DecodeUint(16))
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc {
- for ; j < containerLenS; j++ {
- v = append(v, 0)
- slh.ElemContainerState(j)
- v[j] = uint16(dd.DecodeUint(16))
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 2)
+ } else {
+ xlen = 8
}
+ v = make([]uint16, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak()
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []uint16{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, 0)
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]uint16, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, 0)
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) {
- v[j] = uint16(dd.DecodeUint(16))
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ v[j] = uint16(dd.DecodeUint(16))
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]uint16, 0)
+ changed = true
}
}
slh.End()
return v, changed
}
-func (f *decFnInfo) fastpathDecSliceUint32R(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() {
- vp := rv.Addr().Interface().(*[]uint32)
- v, changed := fastpathTV.DecSliceUint32V(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
+func (d *Decoder) fastpathDecSliceUint32R(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]uint32)
+ if v, changed := fastpathTV.DecSliceUint32V(*vp, !array, d); changed {
*vp = v
}
} else {
- v := rv.Interface().([]uint32)
- fastpathTV.DecSliceUint32V(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.DecSliceUint32V(rv2i(rv).([]uint32), !array, d)
}
}
-func (f fastpathT) DecSliceUint32X(vp *[]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecSliceUint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecSliceUint32X(vp *[]uint32, d *Decoder) {
+ if v, changed := f.DecSliceUint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecSliceUint32V(v []uint32, checkNil bool, canChange bool, d *Decoder) (_ []uint32, changed bool) {
+func (_ fastpathT) DecSliceUint32V(v []uint32, canChange bool, d *Decoder) (_ []uint32, changed bool) {
dd := d.d
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
@@ -18514,125 +17255,83 @@ func (_ fastpathT) DecSliceUint32V(v []uint32, checkNil bool, canChange bool, d
return v, changed
}
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange {
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 4)
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]uint32, xlen)
- }
- } else {
- v = make([]uint32, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4)
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]uint32, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- }
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- v[j] = uint32(dd.DecodeUint(32))
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc {
- for ; j < containerLenS; j++ {
- v = append(v, 0)
- slh.ElemContainerState(j)
- v[j] = uint32(dd.DecodeUint(32))
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4)
+ } else {
+ xlen = 8
}
+ v = make([]uint32, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak()
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []uint32{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, 0)
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]uint32, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, 0)
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) {
- v[j] = uint32(dd.DecodeUint(32))
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ v[j] = uint32(dd.DecodeUint(32))
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]uint32, 0)
+ changed = true
}
}
slh.End()
return v, changed
}
-func (f *decFnInfo) fastpathDecSliceUint64R(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() {
- vp := rv.Addr().Interface().(*[]uint64)
- v, changed := fastpathTV.DecSliceUint64V(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
+func (d *Decoder) fastpathDecSliceUint64R(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]uint64)
+ if v, changed := fastpathTV.DecSliceUint64V(*vp, !array, d); changed {
*vp = v
}
} else {
- v := rv.Interface().([]uint64)
- fastpathTV.DecSliceUint64V(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.DecSliceUint64V(rv2i(rv).([]uint64), !array, d)
}
}
-func (f fastpathT) DecSliceUint64X(vp *[]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecSliceUint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecSliceUint64X(vp *[]uint64, d *Decoder) {
+ if v, changed := f.DecSliceUint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecSliceUint64V(v []uint64, checkNil bool, canChange bool, d *Decoder) (_ []uint64, changed bool) {
+func (_ fastpathT) DecSliceUint64V(v []uint64, canChange bool, d *Decoder) (_ []uint64, changed bool) {
dd := d.d
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
@@ -18647,125 +17346,83 @@ func (_ fastpathT) DecSliceUint64V(v []uint64, checkNil bool, canChange bool, d
return v, changed
}
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange {
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8)
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]uint64, xlen)
- }
- } else {
- v = make([]uint64, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]uint64, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- }
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- v[j] = dd.DecodeUint(64)
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc {
- for ; j < containerLenS; j++ {
- v = append(v, 0)
- slh.ElemContainerState(j)
- v[j] = dd.DecodeUint(64)
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
+ } else {
+ xlen = 8
}
+ v = make([]uint64, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak()
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []uint64{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, 0)
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]uint64, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, 0)
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) {
- v[j] = dd.DecodeUint(64)
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ v[j] = dd.DecodeUint(64)
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]uint64, 0)
+ changed = true
}
}
slh.End()
return v, changed
}
-func (f *decFnInfo) fastpathDecSliceUintptrR(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() {
- vp := rv.Addr().Interface().(*[]uintptr)
- v, changed := fastpathTV.DecSliceUintptrV(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
+func (d *Decoder) fastpathDecSliceUintptrR(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]uintptr)
+ if v, changed := fastpathTV.DecSliceUintptrV(*vp, !array, d); changed {
*vp = v
}
} else {
- v := rv.Interface().([]uintptr)
- fastpathTV.DecSliceUintptrV(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.DecSliceUintptrV(rv2i(rv).([]uintptr), !array, d)
}
}
-func (f fastpathT) DecSliceUintptrX(vp *[]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecSliceUintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecSliceUintptrX(vp *[]uintptr, d *Decoder) {
+ if v, changed := f.DecSliceUintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecSliceUintptrV(v []uintptr, checkNil bool, canChange bool, d *Decoder) (_ []uintptr, changed bool) {
+func (_ fastpathT) DecSliceUintptrV(v []uintptr, canChange bool, d *Decoder) (_ []uintptr, changed bool) {
dd := d.d
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
@@ -18780,125 +17437,83 @@ func (_ fastpathT) DecSliceUintptrV(v []uintptr, checkNil bool, canChange bool,
return v, changed
}
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange {
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8)
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]uintptr, xlen)
- }
- } else {
- v = make([]uintptr, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]uintptr, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- }
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- v[j] = uintptr(dd.DecodeUint(uintBitsize))
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc {
- for ; j < containerLenS; j++ {
- v = append(v, 0)
- slh.ElemContainerState(j)
- v[j] = uintptr(dd.DecodeUint(uintBitsize))
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
+ } else {
+ xlen = 8
}
+ v = make([]uintptr, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak()
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []uintptr{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, 0)
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]uintptr, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, 0)
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) {
- v[j] = uintptr(dd.DecodeUint(uintBitsize))
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ v[j] = uintptr(dd.DecodeUint(uintBitsize))
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]uintptr, 0)
+ changed = true
}
}
slh.End()
return v, changed
}
-func (f *decFnInfo) fastpathDecSliceIntR(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() {
- vp := rv.Addr().Interface().(*[]int)
- v, changed := fastpathTV.DecSliceIntV(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
+func (d *Decoder) fastpathDecSliceIntR(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]int)
+ if v, changed := fastpathTV.DecSliceIntV(*vp, !array, d); changed {
*vp = v
}
} else {
- v := rv.Interface().([]int)
- fastpathTV.DecSliceIntV(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.DecSliceIntV(rv2i(rv).([]int), !array, d)
}
}
-func (f fastpathT) DecSliceIntX(vp *[]int, checkNil bool, d *Decoder) {
- v, changed := f.DecSliceIntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecSliceIntX(vp *[]int, d *Decoder) {
+ if v, changed := f.DecSliceIntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecSliceIntV(v []int, checkNil bool, canChange bool, d *Decoder) (_ []int, changed bool) {
+func (_ fastpathT) DecSliceIntV(v []int, canChange bool, d *Decoder) (_ []int, changed bool) {
dd := d.d
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
@@ -18913,125 +17528,83 @@ func (_ fastpathT) DecSliceIntV(v []int, checkNil bool, canChange bool, d *Decod
return v, changed
}
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange {
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8)
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]int, xlen)
- }
- } else {
- v = make([]int, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]int, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- }
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- v[j] = int(dd.DecodeInt(intBitsize))
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc {
- for ; j < containerLenS; j++ {
- v = append(v, 0)
- slh.ElemContainerState(j)
- v[j] = int(dd.DecodeInt(intBitsize))
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
+ } else {
+ xlen = 8
}
+ v = make([]int, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak()
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []int{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, 0)
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]int, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, 0)
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) {
- v[j] = int(dd.DecodeInt(intBitsize))
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ v[j] = int(dd.DecodeInt(intBitsize))
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]int, 0)
+ changed = true
}
}
slh.End()
return v, changed
}
-func (f *decFnInfo) fastpathDecSliceInt8R(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() {
- vp := rv.Addr().Interface().(*[]int8)
- v, changed := fastpathTV.DecSliceInt8V(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
+func (d *Decoder) fastpathDecSliceInt8R(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]int8)
+ if v, changed := fastpathTV.DecSliceInt8V(*vp, !array, d); changed {
*vp = v
}
} else {
- v := rv.Interface().([]int8)
- fastpathTV.DecSliceInt8V(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.DecSliceInt8V(rv2i(rv).([]int8), !array, d)
}
}
-func (f fastpathT) DecSliceInt8X(vp *[]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecSliceInt8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecSliceInt8X(vp *[]int8, d *Decoder) {
+ if v, changed := f.DecSliceInt8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecSliceInt8V(v []int8, checkNil bool, canChange bool, d *Decoder) (_ []int8, changed bool) {
+func (_ fastpathT) DecSliceInt8V(v []int8, canChange bool, d *Decoder) (_ []int8, changed bool) {
dd := d.d
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
@@ -19046,125 +17619,83 @@ func (_ fastpathT) DecSliceInt8V(v []int8, checkNil bool, canChange bool, d *Dec
return v, changed
}
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange {
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 1)
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]int8, xlen)
- }
- } else {
- v = make([]int8, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1)
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]int8, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- }
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- v[j] = int8(dd.DecodeInt(8))
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc {
- for ; j < containerLenS; j++ {
- v = append(v, 0)
- slh.ElemContainerState(j)
- v[j] = int8(dd.DecodeInt(8))
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1)
+ } else {
+ xlen = 8
}
+ v = make([]int8, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak()
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []int8{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, 0)
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]int8, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, 0)
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) {
- v[j] = int8(dd.DecodeInt(8))
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ v[j] = int8(dd.DecodeInt(8))
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]int8, 0)
+ changed = true
}
}
slh.End()
return v, changed
}
-func (f *decFnInfo) fastpathDecSliceInt16R(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() {
- vp := rv.Addr().Interface().(*[]int16)
- v, changed := fastpathTV.DecSliceInt16V(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
+func (d *Decoder) fastpathDecSliceInt16R(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]int16)
+ if v, changed := fastpathTV.DecSliceInt16V(*vp, !array, d); changed {
*vp = v
}
} else {
- v := rv.Interface().([]int16)
- fastpathTV.DecSliceInt16V(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.DecSliceInt16V(rv2i(rv).([]int16), !array, d)
}
}
-func (f fastpathT) DecSliceInt16X(vp *[]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecSliceInt16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecSliceInt16X(vp *[]int16, d *Decoder) {
+ if v, changed := f.DecSliceInt16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecSliceInt16V(v []int16, checkNil bool, canChange bool, d *Decoder) (_ []int16, changed bool) {
+func (_ fastpathT) DecSliceInt16V(v []int16, canChange bool, d *Decoder) (_ []int16, changed bool) {
dd := d.d
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
@@ -19179,125 +17710,83 @@ func (_ fastpathT) DecSliceInt16V(v []int16, checkNil bool, canChange bool, d *D
return v, changed
}
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange {
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 2)
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]int16, xlen)
- }
- } else {
- v = make([]int16, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 2)
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]int16, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- }
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- v[j] = int16(dd.DecodeInt(16))
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc {
- for ; j < containerLenS; j++ {
- v = append(v, 0)
- slh.ElemContainerState(j)
- v[j] = int16(dd.DecodeInt(16))
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 2)
+ } else {
+ xlen = 8
}
+ v = make([]int16, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak()
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []int16{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, 0)
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]int16, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, 0)
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) {
- v[j] = int16(dd.DecodeInt(16))
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ v[j] = int16(dd.DecodeInt(16))
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]int16, 0)
+ changed = true
}
}
slh.End()
return v, changed
}
-func (f *decFnInfo) fastpathDecSliceInt32R(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() {
- vp := rv.Addr().Interface().(*[]int32)
- v, changed := fastpathTV.DecSliceInt32V(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
+func (d *Decoder) fastpathDecSliceInt32R(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]int32)
+ if v, changed := fastpathTV.DecSliceInt32V(*vp, !array, d); changed {
*vp = v
}
} else {
- v := rv.Interface().([]int32)
- fastpathTV.DecSliceInt32V(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.DecSliceInt32V(rv2i(rv).([]int32), !array, d)
}
}
-func (f fastpathT) DecSliceInt32X(vp *[]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecSliceInt32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecSliceInt32X(vp *[]int32, d *Decoder) {
+ if v, changed := f.DecSliceInt32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecSliceInt32V(v []int32, checkNil bool, canChange bool, d *Decoder) (_ []int32, changed bool) {
+func (_ fastpathT) DecSliceInt32V(v []int32, canChange bool, d *Decoder) (_ []int32, changed bool) {
dd := d.d
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
@@ -19312,125 +17801,83 @@ func (_ fastpathT) DecSliceInt32V(v []int32, checkNil bool, canChange bool, d *D
return v, changed
}
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange {
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 4)
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]int32, xlen)
- }
- } else {
- v = make([]int32, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4)
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]int32, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- }
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- v[j] = int32(dd.DecodeInt(32))
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc {
- for ; j < containerLenS; j++ {
- v = append(v, 0)
- slh.ElemContainerState(j)
- v[j] = int32(dd.DecodeInt(32))
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4)
+ } else {
+ xlen = 8
}
+ v = make([]int32, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak()
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []int32{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, 0)
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]int32, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, 0)
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) {
- v[j] = int32(dd.DecodeInt(32))
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ v[j] = int32(dd.DecodeInt(32))
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]int32, 0)
+ changed = true
}
}
slh.End()
return v, changed
}
-func (f *decFnInfo) fastpathDecSliceInt64R(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() {
- vp := rv.Addr().Interface().(*[]int64)
- v, changed := fastpathTV.DecSliceInt64V(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
+func (d *Decoder) fastpathDecSliceInt64R(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]int64)
+ if v, changed := fastpathTV.DecSliceInt64V(*vp, !array, d); changed {
*vp = v
}
} else {
- v := rv.Interface().([]int64)
- fastpathTV.DecSliceInt64V(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.DecSliceInt64V(rv2i(rv).([]int64), !array, d)
}
}
-func (f fastpathT) DecSliceInt64X(vp *[]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecSliceInt64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecSliceInt64X(vp *[]int64, d *Decoder) {
+ if v, changed := f.DecSliceInt64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecSliceInt64V(v []int64, checkNil bool, canChange bool, d *Decoder) (_ []int64, changed bool) {
+func (_ fastpathT) DecSliceInt64V(v []int64, canChange bool, d *Decoder) (_ []int64, changed bool) {
dd := d.d
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
@@ -19445,125 +17892,83 @@ func (_ fastpathT) DecSliceInt64V(v []int64, checkNil bool, canChange bool, d *D
return v, changed
}
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange {
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8)
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]int64, xlen)
- }
- } else {
- v = make([]int64, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]int64, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- }
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- v[j] = dd.DecodeInt(64)
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc {
- for ; j < containerLenS; j++ {
- v = append(v, 0)
- slh.ElemContainerState(j)
- v[j] = dd.DecodeInt(64)
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
+ } else {
+ xlen = 8
}
+ v = make([]int64, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak()
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []int64{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, 0)
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]int64, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, 0)
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) {
- v[j] = dd.DecodeInt(64)
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ v[j] = dd.DecodeInt(64)
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]int64, 0)
+ changed = true
}
}
slh.End()
return v, changed
}
-func (f *decFnInfo) fastpathDecSliceBoolR(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() {
- vp := rv.Addr().Interface().(*[]bool)
- v, changed := fastpathTV.DecSliceBoolV(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
+func (d *Decoder) fastpathDecSliceBoolR(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]bool)
+ if v, changed := fastpathTV.DecSliceBoolV(*vp, !array, d); changed {
*vp = v
}
} else {
- v := rv.Interface().([]bool)
- fastpathTV.DecSliceBoolV(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.DecSliceBoolV(rv2i(rv).([]bool), !array, d)
}
}
-func (f fastpathT) DecSliceBoolX(vp *[]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecSliceBoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecSliceBoolX(vp *[]bool, d *Decoder) {
+ if v, changed := f.DecSliceBoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecSliceBoolV(v []bool, checkNil bool, canChange bool, d *Decoder) (_ []bool, changed bool) {
+func (_ fastpathT) DecSliceBoolV(v []bool, canChange bool, d *Decoder) (_ []bool, changed bool) {
dd := d.d
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
@@ -19578,19323 +17983,15052 @@ func (_ fastpathT) DecSliceBoolV(v []bool, checkNil bool, canChange bool, d *Dec
return v, changed
}
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange {
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 1)
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]bool, xlen)
- }
- } else {
- v = make([]bool, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1)
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]bool, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- }
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- v[j] = dd.DecodeBool()
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc {
- for ; j < containerLenS; j++ {
- v = append(v, false)
- slh.ElemContainerState(j)
- v[j] = dd.DecodeBool()
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1)
+ } else {
+ xlen = 8
}
+ v = make([]bool, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak()
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []bool{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, false)
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]bool, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, false)
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) {
- v[j] = dd.DecodeBool()
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ v[j] = dd.DecodeBool()
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]bool, 0)
+ changed = true
}
}
slh.End()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfIntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]interface{})
- v, changed := fastpathTV.DecMapIntfIntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfIntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]interface{})
+ if v, changed := fastpathTV.DecMapIntfIntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]interface{})
- fastpathTV.DecMapIntfIntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfIntfV(rv2i(rv).(map[interface{}]interface{}), false, d)
}
-func (f fastpathT) DecMapIntfIntfX(vp *map[interface{}]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfIntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfIntfX(vp *map[interface{}]interface{}, d *Decoder) {
+ if v, changed := f.DecMapIntfIntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfIntfV(v map[interface{}]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfIntfV(v map[interface{}]interface{}, canChange bool,
d *Decoder) (_ map[interface{}]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 32)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 32)
v = make(map[interface{}]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk interface{}
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfStringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]string)
- v, changed := fastpathTV.DecMapIntfStringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfStringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]string)
+ if v, changed := fastpathTV.DecMapIntfStringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]string)
- fastpathTV.DecMapIntfStringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfStringV(rv2i(rv).(map[interface{}]string), false, d)
}
-func (f fastpathT) DecMapIntfStringX(vp *map[interface{}]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfStringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfStringX(vp *map[interface{}]string, d *Decoder) {
+ if v, changed := f.DecMapIntfStringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfStringV(v map[interface{}]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfStringV(v map[interface{}]string, canChange bool,
d *Decoder) (_ map[interface{}]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 32)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 32)
v = make(map[interface{}]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk interface{}
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfUintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]uint)
- v, changed := fastpathTV.DecMapIntfUintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfUintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]uint)
+ if v, changed := fastpathTV.DecMapIntfUintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]uint)
- fastpathTV.DecMapIntfUintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfUintV(rv2i(rv).(map[interface{}]uint), false, d)
}
-func (f fastpathT) DecMapIntfUintX(vp *map[interface{}]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfUintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfUintX(vp *map[interface{}]uint, d *Decoder) {
+ if v, changed := f.DecMapIntfUintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfUintV(v map[interface{}]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfUintV(v map[interface{}]uint, canChange bool,
d *Decoder) (_ map[interface{}]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[interface{}]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk interface{}
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfUint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]uint8)
- v, changed := fastpathTV.DecMapIntfUint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfUint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]uint8)
+ if v, changed := fastpathTV.DecMapIntfUint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]uint8)
- fastpathTV.DecMapIntfUint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfUint8V(rv2i(rv).(map[interface{}]uint8), false, d)
}
-func (f fastpathT) DecMapIntfUint8X(vp *map[interface{}]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfUint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfUint8X(vp *map[interface{}]uint8, d *Decoder) {
+ if v, changed := f.DecMapIntfUint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfUint8V(v map[interface{}]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfUint8V(v map[interface{}]uint8, canChange bool,
d *Decoder) (_ map[interface{}]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 17)
v = make(map[interface{}]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk interface{}
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfUint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]uint16)
- v, changed := fastpathTV.DecMapIntfUint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfUint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]uint16)
+ if v, changed := fastpathTV.DecMapIntfUint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]uint16)
- fastpathTV.DecMapIntfUint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfUint16V(rv2i(rv).(map[interface{}]uint16), false, d)
}
-func (f fastpathT) DecMapIntfUint16X(vp *map[interface{}]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfUint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfUint16X(vp *map[interface{}]uint16, d *Decoder) {
+ if v, changed := f.DecMapIntfUint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfUint16V(v map[interface{}]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfUint16V(v map[interface{}]uint16, canChange bool,
d *Decoder) (_ map[interface{}]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 18)
v = make(map[interface{}]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk interface{}
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfUint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]uint32)
- v, changed := fastpathTV.DecMapIntfUint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfUint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]uint32)
+ if v, changed := fastpathTV.DecMapIntfUint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]uint32)
- fastpathTV.DecMapIntfUint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfUint32V(rv2i(rv).(map[interface{}]uint32), false, d)
}
-func (f fastpathT) DecMapIntfUint32X(vp *map[interface{}]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfUint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfUint32X(vp *map[interface{}]uint32, d *Decoder) {
+ if v, changed := f.DecMapIntfUint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfUint32V(v map[interface{}]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfUint32V(v map[interface{}]uint32, canChange bool,
d *Decoder) (_ map[interface{}]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 20)
v = make(map[interface{}]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk interface{}
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfUint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]uint64)
- v, changed := fastpathTV.DecMapIntfUint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfUint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]uint64)
+ if v, changed := fastpathTV.DecMapIntfUint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]uint64)
- fastpathTV.DecMapIntfUint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfUint64V(rv2i(rv).(map[interface{}]uint64), false, d)
}
-func (f fastpathT) DecMapIntfUint64X(vp *map[interface{}]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfUint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfUint64X(vp *map[interface{}]uint64, d *Decoder) {
+ if v, changed := f.DecMapIntfUint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfUint64V(v map[interface{}]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfUint64V(v map[interface{}]uint64, canChange bool,
d *Decoder) (_ map[interface{}]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[interface{}]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk interface{}
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfUintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]uintptr)
- v, changed := fastpathTV.DecMapIntfUintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfUintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]uintptr)
+ if v, changed := fastpathTV.DecMapIntfUintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]uintptr)
- fastpathTV.DecMapIntfUintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfUintptrV(rv2i(rv).(map[interface{}]uintptr), false, d)
}
-func (f fastpathT) DecMapIntfUintptrX(vp *map[interface{}]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfUintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfUintptrX(vp *map[interface{}]uintptr, d *Decoder) {
+ if v, changed := f.DecMapIntfUintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfUintptrV(v map[interface{}]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfUintptrV(v map[interface{}]uintptr, canChange bool,
d *Decoder) (_ map[interface{}]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[interface{}]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk interface{}
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfIntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]int)
- v, changed := fastpathTV.DecMapIntfIntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfIntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]int)
+ if v, changed := fastpathTV.DecMapIntfIntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]int)
- fastpathTV.DecMapIntfIntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfIntV(rv2i(rv).(map[interface{}]int), false, d)
}
-func (f fastpathT) DecMapIntfIntX(vp *map[interface{}]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfIntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfIntX(vp *map[interface{}]int, d *Decoder) {
+ if v, changed := f.DecMapIntfIntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfIntV(v map[interface{}]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfIntV(v map[interface{}]int, canChange bool,
d *Decoder) (_ map[interface{}]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[interface{}]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk interface{}
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfInt8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]int8)
- v, changed := fastpathTV.DecMapIntfInt8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfInt8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]int8)
+ if v, changed := fastpathTV.DecMapIntfInt8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]int8)
- fastpathTV.DecMapIntfInt8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfInt8V(rv2i(rv).(map[interface{}]int8), false, d)
}
-func (f fastpathT) DecMapIntfInt8X(vp *map[interface{}]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfInt8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfInt8X(vp *map[interface{}]int8, d *Decoder) {
+ if v, changed := f.DecMapIntfInt8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfInt8V(v map[interface{}]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfInt8V(v map[interface{}]int8, canChange bool,
d *Decoder) (_ map[interface{}]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 17)
v = make(map[interface{}]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk interface{}
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfInt16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]int16)
- v, changed := fastpathTV.DecMapIntfInt16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfInt16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]int16)
+ if v, changed := fastpathTV.DecMapIntfInt16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]int16)
- fastpathTV.DecMapIntfInt16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfInt16V(rv2i(rv).(map[interface{}]int16), false, d)
}
-func (f fastpathT) DecMapIntfInt16X(vp *map[interface{}]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfInt16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfInt16X(vp *map[interface{}]int16, d *Decoder) {
+ if v, changed := f.DecMapIntfInt16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfInt16V(v map[interface{}]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfInt16V(v map[interface{}]int16, canChange bool,
d *Decoder) (_ map[interface{}]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 18)
v = make(map[interface{}]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk interface{}
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfInt32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]int32)
- v, changed := fastpathTV.DecMapIntfInt32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfInt32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]int32)
+ if v, changed := fastpathTV.DecMapIntfInt32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]int32)
- fastpathTV.DecMapIntfInt32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfInt32V(rv2i(rv).(map[interface{}]int32), false, d)
}
-func (f fastpathT) DecMapIntfInt32X(vp *map[interface{}]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfInt32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfInt32X(vp *map[interface{}]int32, d *Decoder) {
+ if v, changed := f.DecMapIntfInt32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfInt32V(v map[interface{}]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfInt32V(v map[interface{}]int32, canChange bool,
d *Decoder) (_ map[interface{}]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 20)
v = make(map[interface{}]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk interface{}
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfInt64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]int64)
- v, changed := fastpathTV.DecMapIntfInt64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfInt64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]int64)
+ if v, changed := fastpathTV.DecMapIntfInt64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]int64)
- fastpathTV.DecMapIntfInt64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfInt64V(rv2i(rv).(map[interface{}]int64), false, d)
}
-func (f fastpathT) DecMapIntfInt64X(vp *map[interface{}]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfInt64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfInt64X(vp *map[interface{}]int64, d *Decoder) {
+ if v, changed := f.DecMapIntfInt64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfInt64V(v map[interface{}]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfInt64V(v map[interface{}]int64, canChange bool,
d *Decoder) (_ map[interface{}]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[interface{}]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk interface{}
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfFloat32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]float32)
- v, changed := fastpathTV.DecMapIntfFloat32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfFloat32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]float32)
+ if v, changed := fastpathTV.DecMapIntfFloat32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]float32)
- fastpathTV.DecMapIntfFloat32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfFloat32V(rv2i(rv).(map[interface{}]float32), false, d)
}
-func (f fastpathT) DecMapIntfFloat32X(vp *map[interface{}]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfFloat32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfFloat32X(vp *map[interface{}]float32, d *Decoder) {
+ if v, changed := f.DecMapIntfFloat32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfFloat32V(v map[interface{}]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfFloat32V(v map[interface{}]float32, canChange bool,
d *Decoder) (_ map[interface{}]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 20)
v = make(map[interface{}]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk interface{}
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfFloat64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]float64)
- v, changed := fastpathTV.DecMapIntfFloat64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfFloat64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]float64)
+ if v, changed := fastpathTV.DecMapIntfFloat64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]float64)
- fastpathTV.DecMapIntfFloat64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfFloat64V(rv2i(rv).(map[interface{}]float64), false, d)
}
-func (f fastpathT) DecMapIntfFloat64X(vp *map[interface{}]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfFloat64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfFloat64X(vp *map[interface{}]float64, d *Decoder) {
+ if v, changed := f.DecMapIntfFloat64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfFloat64V(v map[interface{}]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfFloat64V(v map[interface{}]float64, canChange bool,
d *Decoder) (_ map[interface{}]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[interface{}]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk interface{}
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntfBoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[interface{}]bool)
- v, changed := fastpathTV.DecMapIntfBoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntfBoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[interface{}]bool)
+ if v, changed := fastpathTV.DecMapIntfBoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[interface{}]bool)
- fastpathTV.DecMapIntfBoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntfBoolV(rv2i(rv).(map[interface{}]bool), false, d)
}
-func (f fastpathT) DecMapIntfBoolX(vp *map[interface{}]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntfBoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntfBoolX(vp *map[interface{}]bool, d *Decoder) {
+ if v, changed := f.DecMapIntfBoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntfBoolV(v map[interface{}]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntfBoolV(v map[interface{}]bool, canChange bool,
d *Decoder) (_ map[interface{}]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 17)
v = make(map[interface{}]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk interface{}
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv)
+ }
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv)
- }
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringIntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]interface{})
- v, changed := fastpathTV.DecMapStringIntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringIntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]interface{})
+ if v, changed := fastpathTV.DecMapStringIntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]interface{})
- fastpathTV.DecMapStringIntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringIntfV(rv2i(rv).(map[string]interface{}), false, d)
}
-func (f fastpathT) DecMapStringIntfX(vp *map[string]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringIntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringIntfX(vp *map[string]interface{}, d *Decoder) {
+ if v, changed := f.DecMapStringIntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringIntfV(v map[string]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringIntfV(v map[string]interface{}, canChange bool,
d *Decoder) (_ map[string]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 32)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 32)
v = make(map[string]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk string
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringStringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]string)
- v, changed := fastpathTV.DecMapStringStringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringStringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]string)
+ if v, changed := fastpathTV.DecMapStringStringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]string)
- fastpathTV.DecMapStringStringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringStringV(rv2i(rv).(map[string]string), false, d)
}
-func (f fastpathT) DecMapStringStringX(vp *map[string]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringStringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringStringX(vp *map[string]string, d *Decoder) {
+ if v, changed := f.DecMapStringStringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringStringV(v map[string]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringStringV(v map[string]string, canChange bool,
d *Decoder) (_ map[string]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 32)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 32)
v = make(map[string]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk string
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringUintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]uint)
- v, changed := fastpathTV.DecMapStringUintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringUintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]uint)
+ if v, changed := fastpathTV.DecMapStringUintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]uint)
- fastpathTV.DecMapStringUintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringUintV(rv2i(rv).(map[string]uint), false, d)
}
-func (f fastpathT) DecMapStringUintX(vp *map[string]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringUintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringUintX(vp *map[string]uint, d *Decoder) {
+ if v, changed := f.DecMapStringUintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringUintV(v map[string]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringUintV(v map[string]uint, canChange bool,
d *Decoder) (_ map[string]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[string]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk string
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringUint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]uint8)
- v, changed := fastpathTV.DecMapStringUint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringUint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]uint8)
+ if v, changed := fastpathTV.DecMapStringUint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]uint8)
- fastpathTV.DecMapStringUint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringUint8V(rv2i(rv).(map[string]uint8), false, d)
}
-func (f fastpathT) DecMapStringUint8X(vp *map[string]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringUint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringUint8X(vp *map[string]uint8, d *Decoder) {
+ if v, changed := f.DecMapStringUint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringUint8V(v map[string]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringUint8V(v map[string]uint8, canChange bool,
d *Decoder) (_ map[string]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 17)
v = make(map[string]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk string
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringUint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]uint16)
- v, changed := fastpathTV.DecMapStringUint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringUint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]uint16)
+ if v, changed := fastpathTV.DecMapStringUint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]uint16)
- fastpathTV.DecMapStringUint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringUint16V(rv2i(rv).(map[string]uint16), false, d)
}
-func (f fastpathT) DecMapStringUint16X(vp *map[string]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringUint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringUint16X(vp *map[string]uint16, d *Decoder) {
+ if v, changed := f.DecMapStringUint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringUint16V(v map[string]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringUint16V(v map[string]uint16, canChange bool,
d *Decoder) (_ map[string]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 18)
v = make(map[string]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk string
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringUint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]uint32)
- v, changed := fastpathTV.DecMapStringUint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringUint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]uint32)
+ if v, changed := fastpathTV.DecMapStringUint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]uint32)
- fastpathTV.DecMapStringUint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringUint32V(rv2i(rv).(map[string]uint32), false, d)
}
-func (f fastpathT) DecMapStringUint32X(vp *map[string]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringUint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringUint32X(vp *map[string]uint32, d *Decoder) {
+ if v, changed := f.DecMapStringUint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringUint32V(v map[string]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringUint32V(v map[string]uint32, canChange bool,
d *Decoder) (_ map[string]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 20)
v = make(map[string]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk string
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringUint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]uint64)
- v, changed := fastpathTV.DecMapStringUint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringUint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]uint64)
+ if v, changed := fastpathTV.DecMapStringUint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]uint64)
- fastpathTV.DecMapStringUint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringUint64V(rv2i(rv).(map[string]uint64), false, d)
}
-func (f fastpathT) DecMapStringUint64X(vp *map[string]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringUint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringUint64X(vp *map[string]uint64, d *Decoder) {
+ if v, changed := f.DecMapStringUint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringUint64V(v map[string]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringUint64V(v map[string]uint64, canChange bool,
d *Decoder) (_ map[string]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[string]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk string
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringUintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]uintptr)
- v, changed := fastpathTV.DecMapStringUintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringUintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]uintptr)
+ if v, changed := fastpathTV.DecMapStringUintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]uintptr)
- fastpathTV.DecMapStringUintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringUintptrV(rv2i(rv).(map[string]uintptr), false, d)
}
-func (f fastpathT) DecMapStringUintptrX(vp *map[string]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringUintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringUintptrX(vp *map[string]uintptr, d *Decoder) {
+ if v, changed := f.DecMapStringUintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringUintptrV(v map[string]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringUintptrV(v map[string]uintptr, canChange bool,
d *Decoder) (_ map[string]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[string]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk string
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringIntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]int)
- v, changed := fastpathTV.DecMapStringIntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringIntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]int)
+ if v, changed := fastpathTV.DecMapStringIntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]int)
- fastpathTV.DecMapStringIntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringIntV(rv2i(rv).(map[string]int), false, d)
}
-func (f fastpathT) DecMapStringIntX(vp *map[string]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringIntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringIntX(vp *map[string]int, d *Decoder) {
+ if v, changed := f.DecMapStringIntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringIntV(v map[string]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringIntV(v map[string]int, canChange bool,
d *Decoder) (_ map[string]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[string]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk string
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringInt8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]int8)
- v, changed := fastpathTV.DecMapStringInt8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringInt8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]int8)
+ if v, changed := fastpathTV.DecMapStringInt8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]int8)
- fastpathTV.DecMapStringInt8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringInt8V(rv2i(rv).(map[string]int8), false, d)
}
-func (f fastpathT) DecMapStringInt8X(vp *map[string]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringInt8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringInt8X(vp *map[string]int8, d *Decoder) {
+ if v, changed := f.DecMapStringInt8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringInt8V(v map[string]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringInt8V(v map[string]int8, canChange bool,
d *Decoder) (_ map[string]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 17)
v = make(map[string]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk string
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringInt16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]int16)
- v, changed := fastpathTV.DecMapStringInt16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringInt16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]int16)
+ if v, changed := fastpathTV.DecMapStringInt16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]int16)
- fastpathTV.DecMapStringInt16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringInt16V(rv2i(rv).(map[string]int16), false, d)
}
-func (f fastpathT) DecMapStringInt16X(vp *map[string]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringInt16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringInt16X(vp *map[string]int16, d *Decoder) {
+ if v, changed := f.DecMapStringInt16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringInt16V(v map[string]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringInt16V(v map[string]int16, canChange bool,
d *Decoder) (_ map[string]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 18)
v = make(map[string]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk string
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringInt32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]int32)
- v, changed := fastpathTV.DecMapStringInt32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringInt32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]int32)
+ if v, changed := fastpathTV.DecMapStringInt32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]int32)
- fastpathTV.DecMapStringInt32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringInt32V(rv2i(rv).(map[string]int32), false, d)
}
-func (f fastpathT) DecMapStringInt32X(vp *map[string]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringInt32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringInt32X(vp *map[string]int32, d *Decoder) {
+ if v, changed := f.DecMapStringInt32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringInt32V(v map[string]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringInt32V(v map[string]int32, canChange bool,
d *Decoder) (_ map[string]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 20)
v = make(map[string]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk string
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringInt64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]int64)
- v, changed := fastpathTV.DecMapStringInt64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringInt64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]int64)
+ if v, changed := fastpathTV.DecMapStringInt64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]int64)
- fastpathTV.DecMapStringInt64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringInt64V(rv2i(rv).(map[string]int64), false, d)
}
-func (f fastpathT) DecMapStringInt64X(vp *map[string]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringInt64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringInt64X(vp *map[string]int64, d *Decoder) {
+ if v, changed := f.DecMapStringInt64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringInt64V(v map[string]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringInt64V(v map[string]int64, canChange bool,
d *Decoder) (_ map[string]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[string]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk string
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringFloat32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]float32)
- v, changed := fastpathTV.DecMapStringFloat32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringFloat32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]float32)
+ if v, changed := fastpathTV.DecMapStringFloat32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]float32)
- fastpathTV.DecMapStringFloat32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringFloat32V(rv2i(rv).(map[string]float32), false, d)
}
-func (f fastpathT) DecMapStringFloat32X(vp *map[string]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringFloat32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringFloat32X(vp *map[string]float32, d *Decoder) {
+ if v, changed := f.DecMapStringFloat32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringFloat32V(v map[string]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringFloat32V(v map[string]float32, canChange bool,
d *Decoder) (_ map[string]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 20)
v = make(map[string]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk string
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringFloat64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]float64)
- v, changed := fastpathTV.DecMapStringFloat64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringFloat64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]float64)
+ if v, changed := fastpathTV.DecMapStringFloat64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]float64)
- fastpathTV.DecMapStringFloat64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringFloat64V(rv2i(rv).(map[string]float64), false, d)
}
-func (f fastpathT) DecMapStringFloat64X(vp *map[string]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringFloat64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringFloat64X(vp *map[string]float64, d *Decoder) {
+ if v, changed := f.DecMapStringFloat64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringFloat64V(v map[string]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringFloat64V(v map[string]float64, canChange bool,
d *Decoder) (_ map[string]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[string]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk string
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapStringBoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[string]bool)
- v, changed := fastpathTV.DecMapStringBoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapStringBoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[string]bool)
+ if v, changed := fastpathTV.DecMapStringBoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[string]bool)
- fastpathTV.DecMapStringBoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapStringBoolV(rv2i(rv).(map[string]bool), false, d)
}
-func (f fastpathT) DecMapStringBoolX(vp *map[string]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapStringBoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapStringBoolX(vp *map[string]bool, d *Decoder) {
+ if v, changed := f.DecMapStringBoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapStringBoolV(v map[string]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapStringBoolV(v map[string]bool, canChange bool,
d *Decoder) (_ map[string]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 17)
v = make(map[string]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk string
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeString()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeString()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32IntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]interface{})
- v, changed := fastpathTV.DecMapFloat32IntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32IntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]interface{})
+ if v, changed := fastpathTV.DecMapFloat32IntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]interface{})
- fastpathTV.DecMapFloat32IntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32IntfV(rv2i(rv).(map[float32]interface{}), false, d)
}
-func (f fastpathT) DecMapFloat32IntfX(vp *map[float32]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32IntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32IntfX(vp *map[float32]interface{}, d *Decoder) {
+ if v, changed := f.DecMapFloat32IntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32IntfV(v map[float32]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32IntfV(v map[float32]interface{}, canChange bool,
d *Decoder) (_ map[float32]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 20)
v = make(map[float32]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk float32
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32StringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]string)
- v, changed := fastpathTV.DecMapFloat32StringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32StringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]string)
+ if v, changed := fastpathTV.DecMapFloat32StringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]string)
- fastpathTV.DecMapFloat32StringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32StringV(rv2i(rv).(map[float32]string), false, d)
}
-func (f fastpathT) DecMapFloat32StringX(vp *map[float32]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32StringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32StringX(vp *map[float32]string, d *Decoder) {
+ if v, changed := f.DecMapFloat32StringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32StringV(v map[float32]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32StringV(v map[float32]string, canChange bool,
d *Decoder) (_ map[float32]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 20)
v = make(map[float32]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float32
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32UintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]uint)
- v, changed := fastpathTV.DecMapFloat32UintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32UintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]uint)
+ if v, changed := fastpathTV.DecMapFloat32UintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]uint)
- fastpathTV.DecMapFloat32UintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32UintV(rv2i(rv).(map[float32]uint), false, d)
}
-func (f fastpathT) DecMapFloat32UintX(vp *map[float32]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32UintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32UintX(vp *map[float32]uint, d *Decoder) {
+ if v, changed := f.DecMapFloat32UintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32UintV(v map[float32]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32UintV(v map[float32]uint, canChange bool,
d *Decoder) (_ map[float32]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[float32]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float32
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32Uint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]uint8)
- v, changed := fastpathTV.DecMapFloat32Uint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32Uint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]uint8)
+ if v, changed := fastpathTV.DecMapFloat32Uint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]uint8)
- fastpathTV.DecMapFloat32Uint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32Uint8V(rv2i(rv).(map[float32]uint8), false, d)
}
-func (f fastpathT) DecMapFloat32Uint8X(vp *map[float32]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32Uint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32Uint8X(vp *map[float32]uint8, d *Decoder) {
+ if v, changed := f.DecMapFloat32Uint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32Uint8V(v map[float32]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32Uint8V(v map[float32]uint8, canChange bool,
d *Decoder) (_ map[float32]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[float32]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float32
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32Uint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]uint16)
- v, changed := fastpathTV.DecMapFloat32Uint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32Uint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]uint16)
+ if v, changed := fastpathTV.DecMapFloat32Uint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]uint16)
- fastpathTV.DecMapFloat32Uint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32Uint16V(rv2i(rv).(map[float32]uint16), false, d)
}
-func (f fastpathT) DecMapFloat32Uint16X(vp *map[float32]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32Uint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32Uint16X(vp *map[float32]uint16, d *Decoder) {
+ if v, changed := f.DecMapFloat32Uint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32Uint16V(v map[float32]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32Uint16V(v map[float32]uint16, canChange bool,
d *Decoder) (_ map[float32]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 6)
v = make(map[float32]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float32
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32Uint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]uint32)
- v, changed := fastpathTV.DecMapFloat32Uint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32Uint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]uint32)
+ if v, changed := fastpathTV.DecMapFloat32Uint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]uint32)
- fastpathTV.DecMapFloat32Uint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32Uint32V(rv2i(rv).(map[float32]uint32), false, d)
}
-func (f fastpathT) DecMapFloat32Uint32X(vp *map[float32]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32Uint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32Uint32X(vp *map[float32]uint32, d *Decoder) {
+ if v, changed := f.DecMapFloat32Uint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32Uint32V(v map[float32]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32Uint32V(v map[float32]uint32, canChange bool,
d *Decoder) (_ map[float32]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 8)
v = make(map[float32]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float32
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32Uint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]uint64)
- v, changed := fastpathTV.DecMapFloat32Uint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32Uint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]uint64)
+ if v, changed := fastpathTV.DecMapFloat32Uint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]uint64)
- fastpathTV.DecMapFloat32Uint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32Uint64V(rv2i(rv).(map[float32]uint64), false, d)
}
-func (f fastpathT) DecMapFloat32Uint64X(vp *map[float32]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32Uint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32Uint64X(vp *map[float32]uint64, d *Decoder) {
+ if v, changed := f.DecMapFloat32Uint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32Uint64V(v map[float32]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32Uint64V(v map[float32]uint64, canChange bool,
d *Decoder) (_ map[float32]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[float32]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float32
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32UintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]uintptr)
- v, changed := fastpathTV.DecMapFloat32UintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32UintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]uintptr)
+ if v, changed := fastpathTV.DecMapFloat32UintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]uintptr)
- fastpathTV.DecMapFloat32UintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32UintptrV(rv2i(rv).(map[float32]uintptr), false, d)
}
-func (f fastpathT) DecMapFloat32UintptrX(vp *map[float32]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32UintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32UintptrX(vp *map[float32]uintptr, d *Decoder) {
+ if v, changed := f.DecMapFloat32UintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32UintptrV(v map[float32]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32UintptrV(v map[float32]uintptr, canChange bool,
d *Decoder) (_ map[float32]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[float32]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float32
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32IntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]int)
- v, changed := fastpathTV.DecMapFloat32IntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32IntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]int)
+ if v, changed := fastpathTV.DecMapFloat32IntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]int)
- fastpathTV.DecMapFloat32IntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32IntV(rv2i(rv).(map[float32]int), false, d)
}
-func (f fastpathT) DecMapFloat32IntX(vp *map[float32]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32IntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32IntX(vp *map[float32]int, d *Decoder) {
+ if v, changed := f.DecMapFloat32IntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32IntV(v map[float32]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32IntV(v map[float32]int, canChange bool,
d *Decoder) (_ map[float32]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[float32]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float32
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32Int8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]int8)
- v, changed := fastpathTV.DecMapFloat32Int8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32Int8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]int8)
+ if v, changed := fastpathTV.DecMapFloat32Int8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]int8)
- fastpathTV.DecMapFloat32Int8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32Int8V(rv2i(rv).(map[float32]int8), false, d)
}
-func (f fastpathT) DecMapFloat32Int8X(vp *map[float32]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32Int8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32Int8X(vp *map[float32]int8, d *Decoder) {
+ if v, changed := f.DecMapFloat32Int8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32Int8V(v map[float32]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32Int8V(v map[float32]int8, canChange bool,
d *Decoder) (_ map[float32]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[float32]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float32
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32Int16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]int16)
- v, changed := fastpathTV.DecMapFloat32Int16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32Int16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]int16)
+ if v, changed := fastpathTV.DecMapFloat32Int16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]int16)
- fastpathTV.DecMapFloat32Int16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32Int16V(rv2i(rv).(map[float32]int16), false, d)
}
-func (f fastpathT) DecMapFloat32Int16X(vp *map[float32]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32Int16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32Int16X(vp *map[float32]int16, d *Decoder) {
+ if v, changed := f.DecMapFloat32Int16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32Int16V(v map[float32]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32Int16V(v map[float32]int16, canChange bool,
d *Decoder) (_ map[float32]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 6)
v = make(map[float32]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float32
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32Int32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]int32)
- v, changed := fastpathTV.DecMapFloat32Int32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32Int32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]int32)
+ if v, changed := fastpathTV.DecMapFloat32Int32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]int32)
- fastpathTV.DecMapFloat32Int32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32Int32V(rv2i(rv).(map[float32]int32), false, d)
}
-func (f fastpathT) DecMapFloat32Int32X(vp *map[float32]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32Int32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32Int32X(vp *map[float32]int32, d *Decoder) {
+ if v, changed := f.DecMapFloat32Int32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32Int32V(v map[float32]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32Int32V(v map[float32]int32, canChange bool,
d *Decoder) (_ map[float32]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 8)
v = make(map[float32]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float32
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32Int64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]int64)
- v, changed := fastpathTV.DecMapFloat32Int64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32Int64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]int64)
+ if v, changed := fastpathTV.DecMapFloat32Int64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]int64)
- fastpathTV.DecMapFloat32Int64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32Int64V(rv2i(rv).(map[float32]int64), false, d)
}
-func (f fastpathT) DecMapFloat32Int64X(vp *map[float32]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32Int64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32Int64X(vp *map[float32]int64, d *Decoder) {
+ if v, changed := f.DecMapFloat32Int64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32Int64V(v map[float32]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32Int64V(v map[float32]int64, canChange bool,
d *Decoder) (_ map[float32]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[float32]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float32
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32Float32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]float32)
- v, changed := fastpathTV.DecMapFloat32Float32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32Float32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]float32)
+ if v, changed := fastpathTV.DecMapFloat32Float32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]float32)
- fastpathTV.DecMapFloat32Float32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32Float32V(rv2i(rv).(map[float32]float32), false, d)
}
-func (f fastpathT) DecMapFloat32Float32X(vp *map[float32]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32Float32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32Float32X(vp *map[float32]float32, d *Decoder) {
+ if v, changed := f.DecMapFloat32Float32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32Float32V(v map[float32]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32Float32V(v map[float32]float32, canChange bool,
d *Decoder) (_ map[float32]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 8)
v = make(map[float32]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float32
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32Float64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]float64)
- v, changed := fastpathTV.DecMapFloat32Float64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32Float64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]float64)
+ if v, changed := fastpathTV.DecMapFloat32Float64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]float64)
- fastpathTV.DecMapFloat32Float64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32Float64V(rv2i(rv).(map[float32]float64), false, d)
}
-func (f fastpathT) DecMapFloat32Float64X(vp *map[float32]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32Float64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32Float64X(vp *map[float32]float64, d *Decoder) {
+ if v, changed := f.DecMapFloat32Float64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32Float64V(v map[float32]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32Float64V(v map[float32]float64, canChange bool,
d *Decoder) (_ map[float32]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[float32]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float32
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat32BoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float32]bool)
- v, changed := fastpathTV.DecMapFloat32BoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat32BoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float32]bool)
+ if v, changed := fastpathTV.DecMapFloat32BoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float32]bool)
- fastpathTV.DecMapFloat32BoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat32BoolV(rv2i(rv).(map[float32]bool), false, d)
}
-func (f fastpathT) DecMapFloat32BoolX(vp *map[float32]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat32BoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat32BoolX(vp *map[float32]bool, d *Decoder) {
+ if v, changed := f.DecMapFloat32BoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat32BoolV(v map[float32]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat32BoolV(v map[float32]bool, canChange bool,
d *Decoder) (_ map[float32]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[float32]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float32
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = float32(dd.DecodeFloat(true))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = float32(dd.DecodeFloat(true))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64IntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]interface{})
- v, changed := fastpathTV.DecMapFloat64IntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64IntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]interface{})
+ if v, changed := fastpathTV.DecMapFloat64IntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]interface{})
- fastpathTV.DecMapFloat64IntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64IntfV(rv2i(rv).(map[float64]interface{}), false, d)
}
-func (f fastpathT) DecMapFloat64IntfX(vp *map[float64]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64IntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64IntfX(vp *map[float64]interface{}, d *Decoder) {
+ if v, changed := f.DecMapFloat64IntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64IntfV(v map[float64]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64IntfV(v map[float64]interface{}, canChange bool,
d *Decoder) (_ map[float64]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[float64]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk float64
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64StringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]string)
- v, changed := fastpathTV.DecMapFloat64StringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64StringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]string)
+ if v, changed := fastpathTV.DecMapFloat64StringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]string)
- fastpathTV.DecMapFloat64StringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64StringV(rv2i(rv).(map[float64]string), false, d)
}
-func (f fastpathT) DecMapFloat64StringX(vp *map[float64]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64StringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64StringX(vp *map[float64]string, d *Decoder) {
+ if v, changed := f.DecMapFloat64StringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64StringV(v map[float64]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64StringV(v map[float64]string, canChange bool,
d *Decoder) (_ map[float64]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[float64]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float64
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64UintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]uint)
- v, changed := fastpathTV.DecMapFloat64UintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64UintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]uint)
+ if v, changed := fastpathTV.DecMapFloat64UintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]uint)
- fastpathTV.DecMapFloat64UintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64UintV(rv2i(rv).(map[float64]uint), false, d)
}
-func (f fastpathT) DecMapFloat64UintX(vp *map[float64]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64UintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64UintX(vp *map[float64]uint, d *Decoder) {
+ if v, changed := f.DecMapFloat64UintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64UintV(v map[float64]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64UintV(v map[float64]uint, canChange bool,
d *Decoder) (_ map[float64]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[float64]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float64
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64Uint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]uint8)
- v, changed := fastpathTV.DecMapFloat64Uint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64Uint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]uint8)
+ if v, changed := fastpathTV.DecMapFloat64Uint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]uint8)
- fastpathTV.DecMapFloat64Uint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64Uint8V(rv2i(rv).(map[float64]uint8), false, d)
}
-func (f fastpathT) DecMapFloat64Uint8X(vp *map[float64]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64Uint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64Uint8X(vp *map[float64]uint8, d *Decoder) {
+ if v, changed := f.DecMapFloat64Uint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64Uint8V(v map[float64]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64Uint8V(v map[float64]uint8, canChange bool,
d *Decoder) (_ map[float64]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[float64]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float64
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64Uint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]uint16)
- v, changed := fastpathTV.DecMapFloat64Uint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64Uint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]uint16)
+ if v, changed := fastpathTV.DecMapFloat64Uint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]uint16)
- fastpathTV.DecMapFloat64Uint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64Uint16V(rv2i(rv).(map[float64]uint16), false, d)
}
-func (f fastpathT) DecMapFloat64Uint16X(vp *map[float64]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64Uint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64Uint16X(vp *map[float64]uint16, d *Decoder) {
+ if v, changed := f.DecMapFloat64Uint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64Uint16V(v map[float64]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64Uint16V(v map[float64]uint16, canChange bool,
d *Decoder) (_ map[float64]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[float64]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float64
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64Uint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]uint32)
- v, changed := fastpathTV.DecMapFloat64Uint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64Uint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]uint32)
+ if v, changed := fastpathTV.DecMapFloat64Uint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]uint32)
- fastpathTV.DecMapFloat64Uint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64Uint32V(rv2i(rv).(map[float64]uint32), false, d)
}
-func (f fastpathT) DecMapFloat64Uint32X(vp *map[float64]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64Uint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64Uint32X(vp *map[float64]uint32, d *Decoder) {
+ if v, changed := f.DecMapFloat64Uint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64Uint32V(v map[float64]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64Uint32V(v map[float64]uint32, canChange bool,
d *Decoder) (_ map[float64]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[float64]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float64
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64Uint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]uint64)
- v, changed := fastpathTV.DecMapFloat64Uint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64Uint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]uint64)
+ if v, changed := fastpathTV.DecMapFloat64Uint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]uint64)
- fastpathTV.DecMapFloat64Uint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64Uint64V(rv2i(rv).(map[float64]uint64), false, d)
}
-func (f fastpathT) DecMapFloat64Uint64X(vp *map[float64]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64Uint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64Uint64X(vp *map[float64]uint64, d *Decoder) {
+ if v, changed := f.DecMapFloat64Uint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64Uint64V(v map[float64]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64Uint64V(v map[float64]uint64, canChange bool,
d *Decoder) (_ map[float64]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[float64]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float64
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64UintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]uintptr)
- v, changed := fastpathTV.DecMapFloat64UintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64UintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]uintptr)
+ if v, changed := fastpathTV.DecMapFloat64UintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]uintptr)
- fastpathTV.DecMapFloat64UintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64UintptrV(rv2i(rv).(map[float64]uintptr), false, d)
}
-func (f fastpathT) DecMapFloat64UintptrX(vp *map[float64]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64UintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64UintptrX(vp *map[float64]uintptr, d *Decoder) {
+ if v, changed := f.DecMapFloat64UintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64UintptrV(v map[float64]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64UintptrV(v map[float64]uintptr, canChange bool,
d *Decoder) (_ map[float64]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[float64]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float64
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64IntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]int)
- v, changed := fastpathTV.DecMapFloat64IntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64IntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]int)
+ if v, changed := fastpathTV.DecMapFloat64IntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]int)
- fastpathTV.DecMapFloat64IntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64IntV(rv2i(rv).(map[float64]int), false, d)
}
-func (f fastpathT) DecMapFloat64IntX(vp *map[float64]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64IntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64IntX(vp *map[float64]int, d *Decoder) {
+ if v, changed := f.DecMapFloat64IntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64IntV(v map[float64]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64IntV(v map[float64]int, canChange bool,
d *Decoder) (_ map[float64]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[float64]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float64
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64Int8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]int8)
- v, changed := fastpathTV.DecMapFloat64Int8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64Int8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]int8)
+ if v, changed := fastpathTV.DecMapFloat64Int8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]int8)
- fastpathTV.DecMapFloat64Int8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64Int8V(rv2i(rv).(map[float64]int8), false, d)
}
-func (f fastpathT) DecMapFloat64Int8X(vp *map[float64]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64Int8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64Int8X(vp *map[float64]int8, d *Decoder) {
+ if v, changed := f.DecMapFloat64Int8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64Int8V(v map[float64]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64Int8V(v map[float64]int8, canChange bool,
d *Decoder) (_ map[float64]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[float64]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float64
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64Int16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]int16)
- v, changed := fastpathTV.DecMapFloat64Int16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64Int16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]int16)
+ if v, changed := fastpathTV.DecMapFloat64Int16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]int16)
- fastpathTV.DecMapFloat64Int16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64Int16V(rv2i(rv).(map[float64]int16), false, d)
}
-func (f fastpathT) DecMapFloat64Int16X(vp *map[float64]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64Int16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64Int16X(vp *map[float64]int16, d *Decoder) {
+ if v, changed := f.DecMapFloat64Int16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64Int16V(v map[float64]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64Int16V(v map[float64]int16, canChange bool,
d *Decoder) (_ map[float64]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[float64]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float64
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64Int32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]int32)
- v, changed := fastpathTV.DecMapFloat64Int32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64Int32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]int32)
+ if v, changed := fastpathTV.DecMapFloat64Int32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]int32)
- fastpathTV.DecMapFloat64Int32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64Int32V(rv2i(rv).(map[float64]int32), false, d)
}
-func (f fastpathT) DecMapFloat64Int32X(vp *map[float64]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64Int32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64Int32X(vp *map[float64]int32, d *Decoder) {
+ if v, changed := f.DecMapFloat64Int32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64Int32V(v map[float64]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64Int32V(v map[float64]int32, canChange bool,
d *Decoder) (_ map[float64]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[float64]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float64
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64Int64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]int64)
- v, changed := fastpathTV.DecMapFloat64Int64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64Int64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]int64)
+ if v, changed := fastpathTV.DecMapFloat64Int64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]int64)
- fastpathTV.DecMapFloat64Int64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64Int64V(rv2i(rv).(map[float64]int64), false, d)
}
-func (f fastpathT) DecMapFloat64Int64X(vp *map[float64]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64Int64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64Int64X(vp *map[float64]int64, d *Decoder) {
+ if v, changed := f.DecMapFloat64Int64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64Int64V(v map[float64]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64Int64V(v map[float64]int64, canChange bool,
d *Decoder) (_ map[float64]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[float64]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float64
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64Float32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]float32)
- v, changed := fastpathTV.DecMapFloat64Float32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64Float32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]float32)
+ if v, changed := fastpathTV.DecMapFloat64Float32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]float32)
- fastpathTV.DecMapFloat64Float32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64Float32V(rv2i(rv).(map[float64]float32), false, d)
}
-func (f fastpathT) DecMapFloat64Float32X(vp *map[float64]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64Float32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64Float32X(vp *map[float64]float32, d *Decoder) {
+ if v, changed := f.DecMapFloat64Float32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64Float32V(v map[float64]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64Float32V(v map[float64]float32, canChange bool,
d *Decoder) (_ map[float64]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[float64]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float64
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64Float64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]float64)
- v, changed := fastpathTV.DecMapFloat64Float64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64Float64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]float64)
+ if v, changed := fastpathTV.DecMapFloat64Float64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]float64)
- fastpathTV.DecMapFloat64Float64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64Float64V(rv2i(rv).(map[float64]float64), false, d)
}
-func (f fastpathT) DecMapFloat64Float64X(vp *map[float64]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64Float64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64Float64X(vp *map[float64]float64, d *Decoder) {
+ if v, changed := f.DecMapFloat64Float64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64Float64V(v map[float64]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64Float64V(v map[float64]float64, canChange bool,
d *Decoder) (_ map[float64]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[float64]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float64
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapFloat64BoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[float64]bool)
- v, changed := fastpathTV.DecMapFloat64BoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapFloat64BoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[float64]bool)
+ if v, changed := fastpathTV.DecMapFloat64BoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[float64]bool)
- fastpathTV.DecMapFloat64BoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapFloat64BoolV(rv2i(rv).(map[float64]bool), false, d)
}
-func (f fastpathT) DecMapFloat64BoolX(vp *map[float64]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapFloat64BoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapFloat64BoolX(vp *map[float64]bool, d *Decoder) {
+ if v, changed := f.DecMapFloat64BoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapFloat64BoolV(v map[float64]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapFloat64BoolV(v map[float64]bool, canChange bool,
d *Decoder) (_ map[float64]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[float64]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk float64
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeFloat(false)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeFloat(false)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintIntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]interface{})
- v, changed := fastpathTV.DecMapUintIntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintIntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]interface{})
+ if v, changed := fastpathTV.DecMapUintIntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]interface{})
- fastpathTV.DecMapUintIntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintIntfV(rv2i(rv).(map[uint]interface{}), false, d)
}
-func (f fastpathT) DecMapUintIntfX(vp *map[uint]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintIntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintIntfX(vp *map[uint]interface{}, d *Decoder) {
+ if v, changed := f.DecMapUintIntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintIntfV(v map[uint]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintIntfV(v map[uint]interface{}, canChange bool,
d *Decoder) (_ map[uint]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[uint]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk uint
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintStringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]string)
- v, changed := fastpathTV.DecMapUintStringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintStringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]string)
+ if v, changed := fastpathTV.DecMapUintStringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]string)
- fastpathTV.DecMapUintStringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintStringV(rv2i(rv).(map[uint]string), false, d)
}
-func (f fastpathT) DecMapUintStringX(vp *map[uint]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintStringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintStringX(vp *map[uint]string, d *Decoder) {
+ if v, changed := f.DecMapUintStringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintStringV(v map[uint]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintStringV(v map[uint]string, canChange bool,
d *Decoder) (_ map[uint]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[uint]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintUintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]uint)
- v, changed := fastpathTV.DecMapUintUintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintUintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]uint)
+ if v, changed := fastpathTV.DecMapUintUintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]uint)
- fastpathTV.DecMapUintUintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintUintV(rv2i(rv).(map[uint]uint), false, d)
}
-func (f fastpathT) DecMapUintUintX(vp *map[uint]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintUintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintUintX(vp *map[uint]uint, d *Decoder) {
+ if v, changed := f.DecMapUintUintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintUintV(v map[uint]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintUintV(v map[uint]uint, canChange bool,
d *Decoder) (_ map[uint]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uint]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintUint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]uint8)
- v, changed := fastpathTV.DecMapUintUint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintUint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]uint8)
+ if v, changed := fastpathTV.DecMapUintUint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]uint8)
- fastpathTV.DecMapUintUint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintUint8V(rv2i(rv).(map[uint]uint8), false, d)
}
-func (f fastpathT) DecMapUintUint8X(vp *map[uint]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintUint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintUint8X(vp *map[uint]uint8, d *Decoder) {
+ if v, changed := f.DecMapUintUint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintUint8V(v map[uint]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintUint8V(v map[uint]uint8, canChange bool,
d *Decoder) (_ map[uint]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[uint]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintUint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]uint16)
- v, changed := fastpathTV.DecMapUintUint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintUint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]uint16)
+ if v, changed := fastpathTV.DecMapUintUint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]uint16)
- fastpathTV.DecMapUintUint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintUint16V(rv2i(rv).(map[uint]uint16), false, d)
}
-func (f fastpathT) DecMapUintUint16X(vp *map[uint]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintUint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintUint16X(vp *map[uint]uint16, d *Decoder) {
+ if v, changed := f.DecMapUintUint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintUint16V(v map[uint]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintUint16V(v map[uint]uint16, canChange bool,
d *Decoder) (_ map[uint]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[uint]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintUint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]uint32)
- v, changed := fastpathTV.DecMapUintUint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintUint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]uint32)
+ if v, changed := fastpathTV.DecMapUintUint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]uint32)
- fastpathTV.DecMapUintUint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintUint32V(rv2i(rv).(map[uint]uint32), false, d)
}
-func (f fastpathT) DecMapUintUint32X(vp *map[uint]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintUint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintUint32X(vp *map[uint]uint32, d *Decoder) {
+ if v, changed := f.DecMapUintUint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintUint32V(v map[uint]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintUint32V(v map[uint]uint32, canChange bool,
d *Decoder) (_ map[uint]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[uint]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintUint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]uint64)
- v, changed := fastpathTV.DecMapUintUint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintUint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]uint64)
+ if v, changed := fastpathTV.DecMapUintUint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]uint64)
- fastpathTV.DecMapUintUint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintUint64V(rv2i(rv).(map[uint]uint64), false, d)
}
-func (f fastpathT) DecMapUintUint64X(vp *map[uint]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintUint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintUint64X(vp *map[uint]uint64, d *Decoder) {
+ if v, changed := f.DecMapUintUint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintUint64V(v map[uint]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintUint64V(v map[uint]uint64, canChange bool,
d *Decoder) (_ map[uint]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uint]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintUintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]uintptr)
- v, changed := fastpathTV.DecMapUintUintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintUintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]uintptr)
+ if v, changed := fastpathTV.DecMapUintUintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]uintptr)
- fastpathTV.DecMapUintUintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintUintptrV(rv2i(rv).(map[uint]uintptr), false, d)
}
-func (f fastpathT) DecMapUintUintptrX(vp *map[uint]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintUintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintUintptrX(vp *map[uint]uintptr, d *Decoder) {
+ if v, changed := f.DecMapUintUintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintUintptrV(v map[uint]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintUintptrV(v map[uint]uintptr, canChange bool,
d *Decoder) (_ map[uint]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uint]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintIntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]int)
- v, changed := fastpathTV.DecMapUintIntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintIntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]int)
+ if v, changed := fastpathTV.DecMapUintIntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]int)
- fastpathTV.DecMapUintIntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintIntV(rv2i(rv).(map[uint]int), false, d)
}
-func (f fastpathT) DecMapUintIntX(vp *map[uint]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintIntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintIntX(vp *map[uint]int, d *Decoder) {
+ if v, changed := f.DecMapUintIntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintIntV(v map[uint]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintIntV(v map[uint]int, canChange bool,
d *Decoder) (_ map[uint]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uint]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintInt8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]int8)
- v, changed := fastpathTV.DecMapUintInt8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintInt8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]int8)
+ if v, changed := fastpathTV.DecMapUintInt8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]int8)
- fastpathTV.DecMapUintInt8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintInt8V(rv2i(rv).(map[uint]int8), false, d)
}
-func (f fastpathT) DecMapUintInt8X(vp *map[uint]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintInt8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintInt8X(vp *map[uint]int8, d *Decoder) {
+ if v, changed := f.DecMapUintInt8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintInt8V(v map[uint]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintInt8V(v map[uint]int8, canChange bool,
d *Decoder) (_ map[uint]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[uint]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintInt16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]int16)
- v, changed := fastpathTV.DecMapUintInt16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintInt16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]int16)
+ if v, changed := fastpathTV.DecMapUintInt16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]int16)
- fastpathTV.DecMapUintInt16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintInt16V(rv2i(rv).(map[uint]int16), false, d)
}
-func (f fastpathT) DecMapUintInt16X(vp *map[uint]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintInt16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintInt16X(vp *map[uint]int16, d *Decoder) {
+ if v, changed := f.DecMapUintInt16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintInt16V(v map[uint]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintInt16V(v map[uint]int16, canChange bool,
d *Decoder) (_ map[uint]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[uint]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintInt32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]int32)
- v, changed := fastpathTV.DecMapUintInt32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintInt32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]int32)
+ if v, changed := fastpathTV.DecMapUintInt32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]int32)
- fastpathTV.DecMapUintInt32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintInt32V(rv2i(rv).(map[uint]int32), false, d)
}
-func (f fastpathT) DecMapUintInt32X(vp *map[uint]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintInt32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintInt32X(vp *map[uint]int32, d *Decoder) {
+ if v, changed := f.DecMapUintInt32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintInt32V(v map[uint]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintInt32V(v map[uint]int32, canChange bool,
d *Decoder) (_ map[uint]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[uint]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintInt64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]int64)
- v, changed := fastpathTV.DecMapUintInt64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintInt64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]int64)
+ if v, changed := fastpathTV.DecMapUintInt64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]int64)
- fastpathTV.DecMapUintInt64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintInt64V(rv2i(rv).(map[uint]int64), false, d)
}
-func (f fastpathT) DecMapUintInt64X(vp *map[uint]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintInt64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintInt64X(vp *map[uint]int64, d *Decoder) {
+ if v, changed := f.DecMapUintInt64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintInt64V(v map[uint]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintInt64V(v map[uint]int64, canChange bool,
d *Decoder) (_ map[uint]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uint]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintFloat32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]float32)
- v, changed := fastpathTV.DecMapUintFloat32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintFloat32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]float32)
+ if v, changed := fastpathTV.DecMapUintFloat32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]float32)
- fastpathTV.DecMapUintFloat32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintFloat32V(rv2i(rv).(map[uint]float32), false, d)
}
-func (f fastpathT) DecMapUintFloat32X(vp *map[uint]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintFloat32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintFloat32X(vp *map[uint]float32, d *Decoder) {
+ if v, changed := f.DecMapUintFloat32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintFloat32V(v map[uint]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintFloat32V(v map[uint]float32, canChange bool,
d *Decoder) (_ map[uint]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[uint]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintFloat64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]float64)
- v, changed := fastpathTV.DecMapUintFloat64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintFloat64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]float64)
+ if v, changed := fastpathTV.DecMapUintFloat64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]float64)
- fastpathTV.DecMapUintFloat64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintFloat64V(rv2i(rv).(map[uint]float64), false, d)
}
-func (f fastpathT) DecMapUintFloat64X(vp *map[uint]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintFloat64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintFloat64X(vp *map[uint]float64, d *Decoder) {
+ if v, changed := f.DecMapUintFloat64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintFloat64V(v map[uint]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintFloat64V(v map[uint]float64, canChange bool,
d *Decoder) (_ map[uint]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uint]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintBoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint]bool)
- v, changed := fastpathTV.DecMapUintBoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintBoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint]bool)
+ if v, changed := fastpathTV.DecMapUintBoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint]bool)
- fastpathTV.DecMapUintBoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintBoolV(rv2i(rv).(map[uint]bool), false, d)
}
-func (f fastpathT) DecMapUintBoolX(vp *map[uint]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintBoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintBoolX(vp *map[uint]bool, d *Decoder) {
+ if v, changed := f.DecMapUintBoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintBoolV(v map[uint]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintBoolV(v map[uint]bool, canChange bool,
d *Decoder) (_ map[uint]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[uint]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8IntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]interface{})
- v, changed := fastpathTV.DecMapUint8IntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8IntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]interface{})
+ if v, changed := fastpathTV.DecMapUint8IntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]interface{})
- fastpathTV.DecMapUint8IntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), false, d)
}
-func (f fastpathT) DecMapUint8IntfX(vp *map[uint8]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8IntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8IntfX(vp *map[uint8]interface{}, d *Decoder) {
+ if v, changed := f.DecMapUint8IntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8IntfV(v map[uint8]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8IntfV(v map[uint8]interface{}, canChange bool,
d *Decoder) (_ map[uint8]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 17)
v = make(map[uint8]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk uint8
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8StringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]string)
- v, changed := fastpathTV.DecMapUint8StringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8StringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]string)
+ if v, changed := fastpathTV.DecMapUint8StringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]string)
- fastpathTV.DecMapUint8StringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8StringV(rv2i(rv).(map[uint8]string), false, d)
}
-func (f fastpathT) DecMapUint8StringX(vp *map[uint8]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8StringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8StringX(vp *map[uint8]string, d *Decoder) {
+ if v, changed := f.DecMapUint8StringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8StringV(v map[uint8]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8StringV(v map[uint8]string, canChange bool,
d *Decoder) (_ map[uint8]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 17)
v = make(map[uint8]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint8
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8UintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]uint)
- v, changed := fastpathTV.DecMapUint8UintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8UintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]uint)
+ if v, changed := fastpathTV.DecMapUint8UintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]uint)
- fastpathTV.DecMapUint8UintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8UintV(rv2i(rv).(map[uint8]uint), false, d)
}
-func (f fastpathT) DecMapUint8UintX(vp *map[uint8]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8UintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8UintX(vp *map[uint8]uint, d *Decoder) {
+ if v, changed := f.DecMapUint8UintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8UintV(v map[uint8]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8UintV(v map[uint8]uint, canChange bool,
d *Decoder) (_ map[uint8]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[uint8]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint8
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8Uint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]uint8)
- v, changed := fastpathTV.DecMapUint8Uint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8Uint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]uint8)
+ if v, changed := fastpathTV.DecMapUint8Uint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]uint8)
- fastpathTV.DecMapUint8Uint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), false, d)
}
-func (f fastpathT) DecMapUint8Uint8X(vp *map[uint8]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8Uint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8Uint8X(vp *map[uint8]uint8, d *Decoder) {
+ if v, changed := f.DecMapUint8Uint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8Uint8V(v map[uint8]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8Uint8V(v map[uint8]uint8, canChange bool,
d *Decoder) (_ map[uint8]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 2)
v = make(map[uint8]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint8
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8Uint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]uint16)
- v, changed := fastpathTV.DecMapUint8Uint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8Uint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]uint16)
+ if v, changed := fastpathTV.DecMapUint8Uint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]uint16)
- fastpathTV.DecMapUint8Uint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8Uint16V(rv2i(rv).(map[uint8]uint16), false, d)
}
-func (f fastpathT) DecMapUint8Uint16X(vp *map[uint8]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8Uint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8Uint16X(vp *map[uint8]uint16, d *Decoder) {
+ if v, changed := f.DecMapUint8Uint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8Uint16V(v map[uint8]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8Uint16V(v map[uint8]uint16, canChange bool,
d *Decoder) (_ map[uint8]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 3)
v = make(map[uint8]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint8
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8Uint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]uint32)
- v, changed := fastpathTV.DecMapUint8Uint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8Uint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]uint32)
+ if v, changed := fastpathTV.DecMapUint8Uint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]uint32)
- fastpathTV.DecMapUint8Uint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8Uint32V(rv2i(rv).(map[uint8]uint32), false, d)
}
-func (f fastpathT) DecMapUint8Uint32X(vp *map[uint8]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8Uint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8Uint32X(vp *map[uint8]uint32, d *Decoder) {
+ if v, changed := f.DecMapUint8Uint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8Uint32V(v map[uint8]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8Uint32V(v map[uint8]uint32, canChange bool,
d *Decoder) (_ map[uint8]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[uint8]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint8
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8Uint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]uint64)
- v, changed := fastpathTV.DecMapUint8Uint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8Uint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]uint64)
+ if v, changed := fastpathTV.DecMapUint8Uint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]uint64)
- fastpathTV.DecMapUint8Uint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), false, d)
}
-func (f fastpathT) DecMapUint8Uint64X(vp *map[uint8]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8Uint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8Uint64X(vp *map[uint8]uint64, d *Decoder) {
+ if v, changed := f.DecMapUint8Uint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8Uint64V(v map[uint8]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8Uint64V(v map[uint8]uint64, canChange bool,
d *Decoder) (_ map[uint8]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[uint8]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint8
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8UintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]uintptr)
- v, changed := fastpathTV.DecMapUint8UintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8UintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]uintptr)
+ if v, changed := fastpathTV.DecMapUint8UintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]uintptr)
- fastpathTV.DecMapUint8UintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8UintptrV(rv2i(rv).(map[uint8]uintptr), false, d)
}
-func (f fastpathT) DecMapUint8UintptrX(vp *map[uint8]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8UintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8UintptrX(vp *map[uint8]uintptr, d *Decoder) {
+ if v, changed := f.DecMapUint8UintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8UintptrV(v map[uint8]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8UintptrV(v map[uint8]uintptr, canChange bool,
d *Decoder) (_ map[uint8]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[uint8]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint8
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8IntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]int)
- v, changed := fastpathTV.DecMapUint8IntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8IntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]int)
+ if v, changed := fastpathTV.DecMapUint8IntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]int)
- fastpathTV.DecMapUint8IntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8IntV(rv2i(rv).(map[uint8]int), false, d)
}
-func (f fastpathT) DecMapUint8IntX(vp *map[uint8]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8IntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8IntX(vp *map[uint8]int, d *Decoder) {
+ if v, changed := f.DecMapUint8IntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8IntV(v map[uint8]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8IntV(v map[uint8]int, canChange bool,
d *Decoder) (_ map[uint8]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[uint8]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint8
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8Int8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]int8)
- v, changed := fastpathTV.DecMapUint8Int8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8Int8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]int8)
+ if v, changed := fastpathTV.DecMapUint8Int8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]int8)
- fastpathTV.DecMapUint8Int8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8Int8V(rv2i(rv).(map[uint8]int8), false, d)
}
-func (f fastpathT) DecMapUint8Int8X(vp *map[uint8]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8Int8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8Int8X(vp *map[uint8]int8, d *Decoder) {
+ if v, changed := f.DecMapUint8Int8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8Int8V(v map[uint8]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8Int8V(v map[uint8]int8, canChange bool,
d *Decoder) (_ map[uint8]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 2)
v = make(map[uint8]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint8
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8Int16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]int16)
- v, changed := fastpathTV.DecMapUint8Int16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8Int16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]int16)
+ if v, changed := fastpathTV.DecMapUint8Int16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]int16)
- fastpathTV.DecMapUint8Int16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8Int16V(rv2i(rv).(map[uint8]int16), false, d)
}
-func (f fastpathT) DecMapUint8Int16X(vp *map[uint8]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8Int16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8Int16X(vp *map[uint8]int16, d *Decoder) {
+ if v, changed := f.DecMapUint8Int16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8Int16V(v map[uint8]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8Int16V(v map[uint8]int16, canChange bool,
d *Decoder) (_ map[uint8]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 3)
v = make(map[uint8]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint8
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8Int32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]int32)
- v, changed := fastpathTV.DecMapUint8Int32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8Int32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]int32)
+ if v, changed := fastpathTV.DecMapUint8Int32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]int32)
- fastpathTV.DecMapUint8Int32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8Int32V(rv2i(rv).(map[uint8]int32), false, d)
}
-func (f fastpathT) DecMapUint8Int32X(vp *map[uint8]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8Int32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8Int32X(vp *map[uint8]int32, d *Decoder) {
+ if v, changed := f.DecMapUint8Int32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8Int32V(v map[uint8]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8Int32V(v map[uint8]int32, canChange bool,
d *Decoder) (_ map[uint8]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[uint8]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint8
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8Int64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]int64)
- v, changed := fastpathTV.DecMapUint8Int64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8Int64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]int64)
+ if v, changed := fastpathTV.DecMapUint8Int64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]int64)
- fastpathTV.DecMapUint8Int64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8Int64V(rv2i(rv).(map[uint8]int64), false, d)
}
-func (f fastpathT) DecMapUint8Int64X(vp *map[uint8]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8Int64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8Int64X(vp *map[uint8]int64, d *Decoder) {
+ if v, changed := f.DecMapUint8Int64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8Int64V(v map[uint8]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8Int64V(v map[uint8]int64, canChange bool,
d *Decoder) (_ map[uint8]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[uint8]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint8
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8Float32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]float32)
- v, changed := fastpathTV.DecMapUint8Float32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8Float32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]float32)
+ if v, changed := fastpathTV.DecMapUint8Float32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]float32)
- fastpathTV.DecMapUint8Float32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8Float32V(rv2i(rv).(map[uint8]float32), false, d)
}
-func (f fastpathT) DecMapUint8Float32X(vp *map[uint8]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8Float32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8Float32X(vp *map[uint8]float32, d *Decoder) {
+ if v, changed := f.DecMapUint8Float32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8Float32V(v map[uint8]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8Float32V(v map[uint8]float32, canChange bool,
d *Decoder) (_ map[uint8]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[uint8]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint8
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8Float64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]float64)
- v, changed := fastpathTV.DecMapUint8Float64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8Float64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]float64)
+ if v, changed := fastpathTV.DecMapUint8Float64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]float64)
- fastpathTV.DecMapUint8Float64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8Float64V(rv2i(rv).(map[uint8]float64), false, d)
}
-func (f fastpathT) DecMapUint8Float64X(vp *map[uint8]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8Float64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8Float64X(vp *map[uint8]float64, d *Decoder) {
+ if v, changed := f.DecMapUint8Float64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8Float64V(v map[uint8]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8Float64V(v map[uint8]float64, canChange bool,
d *Decoder) (_ map[uint8]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[uint8]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint8
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint8BoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint8]bool)
- v, changed := fastpathTV.DecMapUint8BoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint8BoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint8]bool)
+ if v, changed := fastpathTV.DecMapUint8BoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint8]bool)
- fastpathTV.DecMapUint8BoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint8BoolV(rv2i(rv).(map[uint8]bool), false, d)
}
-func (f fastpathT) DecMapUint8BoolX(vp *map[uint8]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint8BoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint8BoolX(vp *map[uint8]bool, d *Decoder) {
+ if v, changed := f.DecMapUint8BoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint8BoolV(v map[uint8]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint8BoolV(v map[uint8]bool, canChange bool,
d *Decoder) (_ map[uint8]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 2)
v = make(map[uint8]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint8
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint8(dd.DecodeUint(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint8(dd.DecodeUint(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16IntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]interface{})
- v, changed := fastpathTV.DecMapUint16IntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16IntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]interface{})
+ if v, changed := fastpathTV.DecMapUint16IntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]interface{})
- fastpathTV.DecMapUint16IntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16IntfV(rv2i(rv).(map[uint16]interface{}), false, d)
}
-func (f fastpathT) DecMapUint16IntfX(vp *map[uint16]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16IntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16IntfX(vp *map[uint16]interface{}, d *Decoder) {
+ if v, changed := f.DecMapUint16IntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16IntfV(v map[uint16]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16IntfV(v map[uint16]interface{}, canChange bool,
d *Decoder) (_ map[uint16]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 18)
v = make(map[uint16]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk uint16
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16StringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]string)
- v, changed := fastpathTV.DecMapUint16StringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16StringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]string)
+ if v, changed := fastpathTV.DecMapUint16StringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]string)
- fastpathTV.DecMapUint16StringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16StringV(rv2i(rv).(map[uint16]string), false, d)
}
-func (f fastpathT) DecMapUint16StringX(vp *map[uint16]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16StringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16StringX(vp *map[uint16]string, d *Decoder) {
+ if v, changed := f.DecMapUint16StringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16StringV(v map[uint16]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16StringV(v map[uint16]string, canChange bool,
d *Decoder) (_ map[uint16]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 18)
v = make(map[uint16]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint16
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16UintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]uint)
- v, changed := fastpathTV.DecMapUint16UintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16UintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]uint)
+ if v, changed := fastpathTV.DecMapUint16UintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]uint)
- fastpathTV.DecMapUint16UintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16UintV(rv2i(rv).(map[uint16]uint), false, d)
}
-func (f fastpathT) DecMapUint16UintX(vp *map[uint16]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16UintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16UintX(vp *map[uint16]uint, d *Decoder) {
+ if v, changed := f.DecMapUint16UintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16UintV(v map[uint16]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16UintV(v map[uint16]uint, canChange bool,
d *Decoder) (_ map[uint16]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[uint16]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint16
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16Uint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]uint8)
- v, changed := fastpathTV.DecMapUint16Uint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16Uint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]uint8)
+ if v, changed := fastpathTV.DecMapUint16Uint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]uint8)
- fastpathTV.DecMapUint16Uint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16Uint8V(rv2i(rv).(map[uint16]uint8), false, d)
}
-func (f fastpathT) DecMapUint16Uint8X(vp *map[uint16]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16Uint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16Uint8X(vp *map[uint16]uint8, d *Decoder) {
+ if v, changed := f.DecMapUint16Uint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16Uint8V(v map[uint16]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16Uint8V(v map[uint16]uint8, canChange bool,
d *Decoder) (_ map[uint16]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 3)
v = make(map[uint16]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint16
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16Uint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]uint16)
- v, changed := fastpathTV.DecMapUint16Uint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16Uint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]uint16)
+ if v, changed := fastpathTV.DecMapUint16Uint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]uint16)
- fastpathTV.DecMapUint16Uint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16Uint16V(rv2i(rv).(map[uint16]uint16), false, d)
}
-func (f fastpathT) DecMapUint16Uint16X(vp *map[uint16]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16Uint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16Uint16X(vp *map[uint16]uint16, d *Decoder) {
+ if v, changed := f.DecMapUint16Uint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16Uint16V(v map[uint16]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16Uint16V(v map[uint16]uint16, canChange bool,
d *Decoder) (_ map[uint16]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 4)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 4)
v = make(map[uint16]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint16
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16Uint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]uint32)
- v, changed := fastpathTV.DecMapUint16Uint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16Uint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]uint32)
+ if v, changed := fastpathTV.DecMapUint16Uint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]uint32)
- fastpathTV.DecMapUint16Uint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16Uint32V(rv2i(rv).(map[uint16]uint32), false, d)
}
-func (f fastpathT) DecMapUint16Uint32X(vp *map[uint16]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16Uint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16Uint32X(vp *map[uint16]uint32, d *Decoder) {
+ if v, changed := f.DecMapUint16Uint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16Uint32V(v map[uint16]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16Uint32V(v map[uint16]uint32, canChange bool,
d *Decoder) (_ map[uint16]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 6)
v = make(map[uint16]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint16
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16Uint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]uint64)
- v, changed := fastpathTV.DecMapUint16Uint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16Uint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]uint64)
+ if v, changed := fastpathTV.DecMapUint16Uint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]uint64)
- fastpathTV.DecMapUint16Uint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16Uint64V(rv2i(rv).(map[uint16]uint64), false, d)
}
-func (f fastpathT) DecMapUint16Uint64X(vp *map[uint16]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16Uint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16Uint64X(vp *map[uint16]uint64, d *Decoder) {
+ if v, changed := f.DecMapUint16Uint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16Uint64V(v map[uint16]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16Uint64V(v map[uint16]uint64, canChange bool,
d *Decoder) (_ map[uint16]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[uint16]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint16
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16UintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]uintptr)
- v, changed := fastpathTV.DecMapUint16UintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16UintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]uintptr)
+ if v, changed := fastpathTV.DecMapUint16UintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]uintptr)
- fastpathTV.DecMapUint16UintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16UintptrV(rv2i(rv).(map[uint16]uintptr), false, d)
}
-func (f fastpathT) DecMapUint16UintptrX(vp *map[uint16]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16UintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16UintptrX(vp *map[uint16]uintptr, d *Decoder) {
+ if v, changed := f.DecMapUint16UintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16UintptrV(v map[uint16]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16UintptrV(v map[uint16]uintptr, canChange bool,
d *Decoder) (_ map[uint16]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[uint16]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint16
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16IntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]int)
- v, changed := fastpathTV.DecMapUint16IntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16IntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]int)
+ if v, changed := fastpathTV.DecMapUint16IntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]int)
- fastpathTV.DecMapUint16IntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16IntV(rv2i(rv).(map[uint16]int), false, d)
}
-func (f fastpathT) DecMapUint16IntX(vp *map[uint16]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16IntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16IntX(vp *map[uint16]int, d *Decoder) {
+ if v, changed := f.DecMapUint16IntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16IntV(v map[uint16]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16IntV(v map[uint16]int, canChange bool,
d *Decoder) (_ map[uint16]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[uint16]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint16
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16Int8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]int8)
- v, changed := fastpathTV.DecMapUint16Int8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16Int8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]int8)
+ if v, changed := fastpathTV.DecMapUint16Int8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]int8)
- fastpathTV.DecMapUint16Int8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16Int8V(rv2i(rv).(map[uint16]int8), false, d)
}
-func (f fastpathT) DecMapUint16Int8X(vp *map[uint16]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16Int8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16Int8X(vp *map[uint16]int8, d *Decoder) {
+ if v, changed := f.DecMapUint16Int8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16Int8V(v map[uint16]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16Int8V(v map[uint16]int8, canChange bool,
d *Decoder) (_ map[uint16]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 3)
v = make(map[uint16]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint16
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16Int16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]int16)
- v, changed := fastpathTV.DecMapUint16Int16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16Int16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]int16)
+ if v, changed := fastpathTV.DecMapUint16Int16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]int16)
- fastpathTV.DecMapUint16Int16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16Int16V(rv2i(rv).(map[uint16]int16), false, d)
}
-func (f fastpathT) DecMapUint16Int16X(vp *map[uint16]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16Int16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16Int16X(vp *map[uint16]int16, d *Decoder) {
+ if v, changed := f.DecMapUint16Int16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16Int16V(v map[uint16]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16Int16V(v map[uint16]int16, canChange bool,
d *Decoder) (_ map[uint16]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 4)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 4)
v = make(map[uint16]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint16
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16Int32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]int32)
- v, changed := fastpathTV.DecMapUint16Int32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16Int32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]int32)
+ if v, changed := fastpathTV.DecMapUint16Int32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]int32)
- fastpathTV.DecMapUint16Int32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16Int32V(rv2i(rv).(map[uint16]int32), false, d)
}
-func (f fastpathT) DecMapUint16Int32X(vp *map[uint16]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16Int32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16Int32X(vp *map[uint16]int32, d *Decoder) {
+ if v, changed := f.DecMapUint16Int32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16Int32V(v map[uint16]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16Int32V(v map[uint16]int32, canChange bool,
d *Decoder) (_ map[uint16]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 6)
v = make(map[uint16]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint16
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16Int64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]int64)
- v, changed := fastpathTV.DecMapUint16Int64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16Int64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]int64)
+ if v, changed := fastpathTV.DecMapUint16Int64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]int64)
- fastpathTV.DecMapUint16Int64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16Int64V(rv2i(rv).(map[uint16]int64), false, d)
}
-func (f fastpathT) DecMapUint16Int64X(vp *map[uint16]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16Int64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16Int64X(vp *map[uint16]int64, d *Decoder) {
+ if v, changed := f.DecMapUint16Int64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16Int64V(v map[uint16]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16Int64V(v map[uint16]int64, canChange bool,
d *Decoder) (_ map[uint16]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[uint16]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint16
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16Float32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]float32)
- v, changed := fastpathTV.DecMapUint16Float32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16Float32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]float32)
+ if v, changed := fastpathTV.DecMapUint16Float32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]float32)
- fastpathTV.DecMapUint16Float32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16Float32V(rv2i(rv).(map[uint16]float32), false, d)
}
-func (f fastpathT) DecMapUint16Float32X(vp *map[uint16]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16Float32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16Float32X(vp *map[uint16]float32, d *Decoder) {
+ if v, changed := f.DecMapUint16Float32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16Float32V(v map[uint16]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16Float32V(v map[uint16]float32, canChange bool,
d *Decoder) (_ map[uint16]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 6)
v = make(map[uint16]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint16
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16Float64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]float64)
- v, changed := fastpathTV.DecMapUint16Float64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16Float64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]float64)
+ if v, changed := fastpathTV.DecMapUint16Float64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]float64)
- fastpathTV.DecMapUint16Float64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16Float64V(rv2i(rv).(map[uint16]float64), false, d)
}
-func (f fastpathT) DecMapUint16Float64X(vp *map[uint16]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16Float64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16Float64X(vp *map[uint16]float64, d *Decoder) {
+ if v, changed := f.DecMapUint16Float64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16Float64V(v map[uint16]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16Float64V(v map[uint16]float64, canChange bool,
d *Decoder) (_ map[uint16]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[uint16]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint16
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint16BoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint16]bool)
- v, changed := fastpathTV.DecMapUint16BoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint16BoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint16]bool)
+ if v, changed := fastpathTV.DecMapUint16BoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint16]bool)
- fastpathTV.DecMapUint16BoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint16BoolV(rv2i(rv).(map[uint16]bool), false, d)
}
-func (f fastpathT) DecMapUint16BoolX(vp *map[uint16]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint16BoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint16BoolX(vp *map[uint16]bool, d *Decoder) {
+ if v, changed := f.DecMapUint16BoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint16BoolV(v map[uint16]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint16BoolV(v map[uint16]bool, canChange bool,
d *Decoder) (_ map[uint16]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 3)
v = make(map[uint16]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint16
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint16(dd.DecodeUint(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint16(dd.DecodeUint(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32IntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]interface{})
- v, changed := fastpathTV.DecMapUint32IntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32IntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]interface{})
+ if v, changed := fastpathTV.DecMapUint32IntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]interface{})
- fastpathTV.DecMapUint32IntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32IntfV(rv2i(rv).(map[uint32]interface{}), false, d)
}
-func (f fastpathT) DecMapUint32IntfX(vp *map[uint32]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32IntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32IntfX(vp *map[uint32]interface{}, d *Decoder) {
+ if v, changed := f.DecMapUint32IntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32IntfV(v map[uint32]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32IntfV(v map[uint32]interface{}, canChange bool,
d *Decoder) (_ map[uint32]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 20)
v = make(map[uint32]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk uint32
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32StringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]string)
- v, changed := fastpathTV.DecMapUint32StringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32StringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]string)
+ if v, changed := fastpathTV.DecMapUint32StringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]string)
- fastpathTV.DecMapUint32StringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32StringV(rv2i(rv).(map[uint32]string), false, d)
}
-func (f fastpathT) DecMapUint32StringX(vp *map[uint32]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32StringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32StringX(vp *map[uint32]string, d *Decoder) {
+ if v, changed := f.DecMapUint32StringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32StringV(v map[uint32]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32StringV(v map[uint32]string, canChange bool,
d *Decoder) (_ map[uint32]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 20)
v = make(map[uint32]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint32
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32UintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]uint)
- v, changed := fastpathTV.DecMapUint32UintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32UintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]uint)
+ if v, changed := fastpathTV.DecMapUint32UintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]uint)
- fastpathTV.DecMapUint32UintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32UintV(rv2i(rv).(map[uint32]uint), false, d)
}
-func (f fastpathT) DecMapUint32UintX(vp *map[uint32]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32UintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32UintX(vp *map[uint32]uint, d *Decoder) {
+ if v, changed := f.DecMapUint32UintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32UintV(v map[uint32]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32UintV(v map[uint32]uint, canChange bool,
d *Decoder) (_ map[uint32]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[uint32]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint32
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32Uint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]uint8)
- v, changed := fastpathTV.DecMapUint32Uint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32Uint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]uint8)
+ if v, changed := fastpathTV.DecMapUint32Uint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]uint8)
- fastpathTV.DecMapUint32Uint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32Uint8V(rv2i(rv).(map[uint32]uint8), false, d)
}
-func (f fastpathT) DecMapUint32Uint8X(vp *map[uint32]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32Uint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32Uint8X(vp *map[uint32]uint8, d *Decoder) {
+ if v, changed := f.DecMapUint32Uint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32Uint8V(v map[uint32]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32Uint8V(v map[uint32]uint8, canChange bool,
d *Decoder) (_ map[uint32]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[uint32]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint32
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32Uint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]uint16)
- v, changed := fastpathTV.DecMapUint32Uint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32Uint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]uint16)
+ if v, changed := fastpathTV.DecMapUint32Uint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]uint16)
- fastpathTV.DecMapUint32Uint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32Uint16V(rv2i(rv).(map[uint32]uint16), false, d)
}
-func (f fastpathT) DecMapUint32Uint16X(vp *map[uint32]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32Uint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32Uint16X(vp *map[uint32]uint16, d *Decoder) {
+ if v, changed := f.DecMapUint32Uint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32Uint16V(v map[uint32]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32Uint16V(v map[uint32]uint16, canChange bool,
d *Decoder) (_ map[uint32]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 6)
v = make(map[uint32]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint32
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32Uint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]uint32)
- v, changed := fastpathTV.DecMapUint32Uint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32Uint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]uint32)
+ if v, changed := fastpathTV.DecMapUint32Uint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]uint32)
- fastpathTV.DecMapUint32Uint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32Uint32V(rv2i(rv).(map[uint32]uint32), false, d)
}
-func (f fastpathT) DecMapUint32Uint32X(vp *map[uint32]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32Uint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32Uint32X(vp *map[uint32]uint32, d *Decoder) {
+ if v, changed := f.DecMapUint32Uint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32Uint32V(v map[uint32]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32Uint32V(v map[uint32]uint32, canChange bool,
d *Decoder) (_ map[uint32]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 8)
v = make(map[uint32]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint32
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32Uint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]uint64)
- v, changed := fastpathTV.DecMapUint32Uint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32Uint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]uint64)
+ if v, changed := fastpathTV.DecMapUint32Uint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]uint64)
- fastpathTV.DecMapUint32Uint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32Uint64V(rv2i(rv).(map[uint32]uint64), false, d)
}
-func (f fastpathT) DecMapUint32Uint64X(vp *map[uint32]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32Uint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32Uint64X(vp *map[uint32]uint64, d *Decoder) {
+ if v, changed := f.DecMapUint32Uint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32Uint64V(v map[uint32]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32Uint64V(v map[uint32]uint64, canChange bool,
d *Decoder) (_ map[uint32]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[uint32]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint32
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32UintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]uintptr)
- v, changed := fastpathTV.DecMapUint32UintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32UintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]uintptr)
+ if v, changed := fastpathTV.DecMapUint32UintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]uintptr)
- fastpathTV.DecMapUint32UintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32UintptrV(rv2i(rv).(map[uint32]uintptr), false, d)
}
-func (f fastpathT) DecMapUint32UintptrX(vp *map[uint32]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32UintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32UintptrX(vp *map[uint32]uintptr, d *Decoder) {
+ if v, changed := f.DecMapUint32UintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32UintptrV(v map[uint32]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32UintptrV(v map[uint32]uintptr, canChange bool,
d *Decoder) (_ map[uint32]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[uint32]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint32
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32IntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]int)
- v, changed := fastpathTV.DecMapUint32IntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32IntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]int)
+ if v, changed := fastpathTV.DecMapUint32IntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]int)
- fastpathTV.DecMapUint32IntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32IntV(rv2i(rv).(map[uint32]int), false, d)
}
-func (f fastpathT) DecMapUint32IntX(vp *map[uint32]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32IntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32IntX(vp *map[uint32]int, d *Decoder) {
+ if v, changed := f.DecMapUint32IntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32IntV(v map[uint32]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32IntV(v map[uint32]int, canChange bool,
d *Decoder) (_ map[uint32]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[uint32]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint32
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32Int8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]int8)
- v, changed := fastpathTV.DecMapUint32Int8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32Int8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]int8)
+ if v, changed := fastpathTV.DecMapUint32Int8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]int8)
- fastpathTV.DecMapUint32Int8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32Int8V(rv2i(rv).(map[uint32]int8), false, d)
}
-func (f fastpathT) DecMapUint32Int8X(vp *map[uint32]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32Int8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32Int8X(vp *map[uint32]int8, d *Decoder) {
+ if v, changed := f.DecMapUint32Int8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32Int8V(v map[uint32]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32Int8V(v map[uint32]int8, canChange bool,
d *Decoder) (_ map[uint32]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[uint32]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint32
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32Int16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]int16)
- v, changed := fastpathTV.DecMapUint32Int16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32Int16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]int16)
+ if v, changed := fastpathTV.DecMapUint32Int16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]int16)
- fastpathTV.DecMapUint32Int16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32Int16V(rv2i(rv).(map[uint32]int16), false, d)
}
-func (f fastpathT) DecMapUint32Int16X(vp *map[uint32]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32Int16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32Int16X(vp *map[uint32]int16, d *Decoder) {
+ if v, changed := f.DecMapUint32Int16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32Int16V(v map[uint32]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32Int16V(v map[uint32]int16, canChange bool,
d *Decoder) (_ map[uint32]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 6)
v = make(map[uint32]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint32
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32Int32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]int32)
- v, changed := fastpathTV.DecMapUint32Int32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32Int32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]int32)
+ if v, changed := fastpathTV.DecMapUint32Int32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]int32)
- fastpathTV.DecMapUint32Int32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32Int32V(rv2i(rv).(map[uint32]int32), false, d)
}
-func (f fastpathT) DecMapUint32Int32X(vp *map[uint32]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32Int32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32Int32X(vp *map[uint32]int32, d *Decoder) {
+ if v, changed := f.DecMapUint32Int32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32Int32V(v map[uint32]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32Int32V(v map[uint32]int32, canChange bool,
d *Decoder) (_ map[uint32]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 8)
v = make(map[uint32]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint32
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32Int64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]int64)
- v, changed := fastpathTV.DecMapUint32Int64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32Int64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]int64)
+ if v, changed := fastpathTV.DecMapUint32Int64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]int64)
- fastpathTV.DecMapUint32Int64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32Int64V(rv2i(rv).(map[uint32]int64), false, d)
}
-func (f fastpathT) DecMapUint32Int64X(vp *map[uint32]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32Int64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32Int64X(vp *map[uint32]int64, d *Decoder) {
+ if v, changed := f.DecMapUint32Int64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32Int64V(v map[uint32]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32Int64V(v map[uint32]int64, canChange bool,
d *Decoder) (_ map[uint32]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[uint32]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint32
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32Float32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]float32)
- v, changed := fastpathTV.DecMapUint32Float32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32Float32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]float32)
+ if v, changed := fastpathTV.DecMapUint32Float32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]float32)
- fastpathTV.DecMapUint32Float32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32Float32V(rv2i(rv).(map[uint32]float32), false, d)
}
-func (f fastpathT) DecMapUint32Float32X(vp *map[uint32]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32Float32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32Float32X(vp *map[uint32]float32, d *Decoder) {
+ if v, changed := f.DecMapUint32Float32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32Float32V(v map[uint32]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32Float32V(v map[uint32]float32, canChange bool,
d *Decoder) (_ map[uint32]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 8)
v = make(map[uint32]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint32
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32Float64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]float64)
- v, changed := fastpathTV.DecMapUint32Float64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32Float64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]float64)
+ if v, changed := fastpathTV.DecMapUint32Float64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]float64)
- fastpathTV.DecMapUint32Float64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32Float64V(rv2i(rv).(map[uint32]float64), false, d)
}
-func (f fastpathT) DecMapUint32Float64X(vp *map[uint32]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32Float64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32Float64X(vp *map[uint32]float64, d *Decoder) {
+ if v, changed := f.DecMapUint32Float64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32Float64V(v map[uint32]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32Float64V(v map[uint32]float64, canChange bool,
d *Decoder) (_ map[uint32]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[uint32]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint32
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint32BoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint32]bool)
- v, changed := fastpathTV.DecMapUint32BoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint32BoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint32]bool)
+ if v, changed := fastpathTV.DecMapUint32BoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint32]bool)
- fastpathTV.DecMapUint32BoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint32BoolV(rv2i(rv).(map[uint32]bool), false, d)
}
-func (f fastpathT) DecMapUint32BoolX(vp *map[uint32]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint32BoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint32BoolX(vp *map[uint32]bool, d *Decoder) {
+ if v, changed := f.DecMapUint32BoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint32BoolV(v map[uint32]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint32BoolV(v map[uint32]bool, canChange bool,
d *Decoder) (_ map[uint32]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[uint32]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint32
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uint32(dd.DecodeUint(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uint32(dd.DecodeUint(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64IntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]interface{})
- v, changed := fastpathTV.DecMapUint64IntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64IntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]interface{})
+ if v, changed := fastpathTV.DecMapUint64IntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]interface{})
- fastpathTV.DecMapUint64IntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), false, d)
}
-func (f fastpathT) DecMapUint64IntfX(vp *map[uint64]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64IntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64IntfX(vp *map[uint64]interface{}, d *Decoder) {
+ if v, changed := f.DecMapUint64IntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64IntfV(v map[uint64]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64IntfV(v map[uint64]interface{}, canChange bool,
d *Decoder) (_ map[uint64]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[uint64]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk uint64
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64StringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]string)
- v, changed := fastpathTV.DecMapUint64StringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64StringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]string)
+ if v, changed := fastpathTV.DecMapUint64StringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]string)
- fastpathTV.DecMapUint64StringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64StringV(rv2i(rv).(map[uint64]string), false, d)
}
-func (f fastpathT) DecMapUint64StringX(vp *map[uint64]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64StringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64StringX(vp *map[uint64]string, d *Decoder) {
+ if v, changed := f.DecMapUint64StringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64StringV(v map[uint64]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64StringV(v map[uint64]string, canChange bool,
d *Decoder) (_ map[uint64]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[uint64]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint64
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64UintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]uint)
- v, changed := fastpathTV.DecMapUint64UintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64UintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]uint)
+ if v, changed := fastpathTV.DecMapUint64UintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]uint)
- fastpathTV.DecMapUint64UintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64UintV(rv2i(rv).(map[uint64]uint), false, d)
}
-func (f fastpathT) DecMapUint64UintX(vp *map[uint64]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64UintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64UintX(vp *map[uint64]uint, d *Decoder) {
+ if v, changed := f.DecMapUint64UintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64UintV(v map[uint64]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64UintV(v map[uint64]uint, canChange bool,
d *Decoder) (_ map[uint64]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uint64]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint64
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64Uint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]uint8)
- v, changed := fastpathTV.DecMapUint64Uint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64Uint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]uint8)
+ if v, changed := fastpathTV.DecMapUint64Uint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]uint8)
- fastpathTV.DecMapUint64Uint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), false, d)
}
-func (f fastpathT) DecMapUint64Uint8X(vp *map[uint64]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64Uint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64Uint8X(vp *map[uint64]uint8, d *Decoder) {
+ if v, changed := f.DecMapUint64Uint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64Uint8V(v map[uint64]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64Uint8V(v map[uint64]uint8, canChange bool,
d *Decoder) (_ map[uint64]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[uint64]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint64
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64Uint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]uint16)
- v, changed := fastpathTV.DecMapUint64Uint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64Uint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]uint16)
+ if v, changed := fastpathTV.DecMapUint64Uint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]uint16)
- fastpathTV.DecMapUint64Uint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64Uint16V(rv2i(rv).(map[uint64]uint16), false, d)
}
-func (f fastpathT) DecMapUint64Uint16X(vp *map[uint64]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64Uint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64Uint16X(vp *map[uint64]uint16, d *Decoder) {
+ if v, changed := f.DecMapUint64Uint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64Uint16V(v map[uint64]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64Uint16V(v map[uint64]uint16, canChange bool,
d *Decoder) (_ map[uint64]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[uint64]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint64
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64Uint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]uint32)
- v, changed := fastpathTV.DecMapUint64Uint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64Uint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]uint32)
+ if v, changed := fastpathTV.DecMapUint64Uint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]uint32)
- fastpathTV.DecMapUint64Uint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64Uint32V(rv2i(rv).(map[uint64]uint32), false, d)
}
-func (f fastpathT) DecMapUint64Uint32X(vp *map[uint64]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64Uint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64Uint32X(vp *map[uint64]uint32, d *Decoder) {
+ if v, changed := f.DecMapUint64Uint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64Uint32V(v map[uint64]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64Uint32V(v map[uint64]uint32, canChange bool,
d *Decoder) (_ map[uint64]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[uint64]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint64
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64Uint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]uint64)
- v, changed := fastpathTV.DecMapUint64Uint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64Uint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]uint64)
+ if v, changed := fastpathTV.DecMapUint64Uint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]uint64)
- fastpathTV.DecMapUint64Uint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), false, d)
}
-func (f fastpathT) DecMapUint64Uint64X(vp *map[uint64]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64Uint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64Uint64X(vp *map[uint64]uint64, d *Decoder) {
+ if v, changed := f.DecMapUint64Uint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64Uint64V(v map[uint64]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64Uint64V(v map[uint64]uint64, canChange bool,
d *Decoder) (_ map[uint64]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uint64]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint64
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64UintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]uintptr)
- v, changed := fastpathTV.DecMapUint64UintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64UintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]uintptr)
+ if v, changed := fastpathTV.DecMapUint64UintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]uintptr)
- fastpathTV.DecMapUint64UintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64UintptrV(rv2i(rv).(map[uint64]uintptr), false, d)
}
-func (f fastpathT) DecMapUint64UintptrX(vp *map[uint64]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64UintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64UintptrX(vp *map[uint64]uintptr, d *Decoder) {
+ if v, changed := f.DecMapUint64UintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64UintptrV(v map[uint64]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64UintptrV(v map[uint64]uintptr, canChange bool,
d *Decoder) (_ map[uint64]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uint64]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint64
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64IntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]int)
- v, changed := fastpathTV.DecMapUint64IntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64IntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]int)
+ if v, changed := fastpathTV.DecMapUint64IntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]int)
- fastpathTV.DecMapUint64IntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64IntV(rv2i(rv).(map[uint64]int), false, d)
}
-func (f fastpathT) DecMapUint64IntX(vp *map[uint64]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64IntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64IntX(vp *map[uint64]int, d *Decoder) {
+ if v, changed := f.DecMapUint64IntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64IntV(v map[uint64]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64IntV(v map[uint64]int, canChange bool,
d *Decoder) (_ map[uint64]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uint64]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint64
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64Int8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]int8)
- v, changed := fastpathTV.DecMapUint64Int8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64Int8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]int8)
+ if v, changed := fastpathTV.DecMapUint64Int8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]int8)
- fastpathTV.DecMapUint64Int8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64Int8V(rv2i(rv).(map[uint64]int8), false, d)
}
-func (f fastpathT) DecMapUint64Int8X(vp *map[uint64]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64Int8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64Int8X(vp *map[uint64]int8, d *Decoder) {
+ if v, changed := f.DecMapUint64Int8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64Int8V(v map[uint64]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64Int8V(v map[uint64]int8, canChange bool,
d *Decoder) (_ map[uint64]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[uint64]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint64
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64Int16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]int16)
- v, changed := fastpathTV.DecMapUint64Int16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64Int16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]int16)
+ if v, changed := fastpathTV.DecMapUint64Int16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]int16)
- fastpathTV.DecMapUint64Int16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64Int16V(rv2i(rv).(map[uint64]int16), false, d)
}
-func (f fastpathT) DecMapUint64Int16X(vp *map[uint64]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64Int16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64Int16X(vp *map[uint64]int16, d *Decoder) {
+ if v, changed := f.DecMapUint64Int16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64Int16V(v map[uint64]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64Int16V(v map[uint64]int16, canChange bool,
d *Decoder) (_ map[uint64]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[uint64]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint64
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64Int32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]int32)
- v, changed := fastpathTV.DecMapUint64Int32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64Int32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]int32)
+ if v, changed := fastpathTV.DecMapUint64Int32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]int32)
- fastpathTV.DecMapUint64Int32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64Int32V(rv2i(rv).(map[uint64]int32), false, d)
}
-func (f fastpathT) DecMapUint64Int32X(vp *map[uint64]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64Int32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64Int32X(vp *map[uint64]int32, d *Decoder) {
+ if v, changed := f.DecMapUint64Int32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64Int32V(v map[uint64]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64Int32V(v map[uint64]int32, canChange bool,
d *Decoder) (_ map[uint64]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[uint64]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint64
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64Int64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]int64)
- v, changed := fastpathTV.DecMapUint64Int64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64Int64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]int64)
+ if v, changed := fastpathTV.DecMapUint64Int64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]int64)
- fastpathTV.DecMapUint64Int64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64Int64V(rv2i(rv).(map[uint64]int64), false, d)
}
-func (f fastpathT) DecMapUint64Int64X(vp *map[uint64]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64Int64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64Int64X(vp *map[uint64]int64, d *Decoder) {
+ if v, changed := f.DecMapUint64Int64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64Int64V(v map[uint64]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64Int64V(v map[uint64]int64, canChange bool,
d *Decoder) (_ map[uint64]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uint64]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint64
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64Float32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]float32)
- v, changed := fastpathTV.DecMapUint64Float32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64Float32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]float32)
+ if v, changed := fastpathTV.DecMapUint64Float32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]float32)
- fastpathTV.DecMapUint64Float32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64Float32V(rv2i(rv).(map[uint64]float32), false, d)
}
-func (f fastpathT) DecMapUint64Float32X(vp *map[uint64]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64Float32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64Float32X(vp *map[uint64]float32, d *Decoder) {
+ if v, changed := f.DecMapUint64Float32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64Float32V(v map[uint64]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64Float32V(v map[uint64]float32, canChange bool,
d *Decoder) (_ map[uint64]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[uint64]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint64
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64Float64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]float64)
- v, changed := fastpathTV.DecMapUint64Float64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64Float64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]float64)
+ if v, changed := fastpathTV.DecMapUint64Float64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]float64)
- fastpathTV.DecMapUint64Float64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64Float64V(rv2i(rv).(map[uint64]float64), false, d)
}
-func (f fastpathT) DecMapUint64Float64X(vp *map[uint64]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64Float64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64Float64X(vp *map[uint64]float64, d *Decoder) {
+ if v, changed := f.DecMapUint64Float64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64Float64V(v map[uint64]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64Float64V(v map[uint64]float64, canChange bool,
d *Decoder) (_ map[uint64]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uint64]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint64
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUint64BoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uint64]bool)
- v, changed := fastpathTV.DecMapUint64BoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUint64BoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uint64]bool)
+ if v, changed := fastpathTV.DecMapUint64BoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uint64]bool)
- fastpathTV.DecMapUint64BoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUint64BoolV(rv2i(rv).(map[uint64]bool), false, d)
}
-func (f fastpathT) DecMapUint64BoolX(vp *map[uint64]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUint64BoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUint64BoolX(vp *map[uint64]bool, d *Decoder) {
+ if v, changed := f.DecMapUint64BoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUint64BoolV(v map[uint64]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUint64BoolV(v map[uint64]bool, canChange bool,
d *Decoder) (_ map[uint64]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[uint64]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uint64
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeUint(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeUint(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrIntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]interface{})
- v, changed := fastpathTV.DecMapUintptrIntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrIntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]interface{})
+ if v, changed := fastpathTV.DecMapUintptrIntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]interface{})
- fastpathTV.DecMapUintptrIntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrIntfV(rv2i(rv).(map[uintptr]interface{}), false, d)
}
-func (f fastpathT) DecMapUintptrIntfX(vp *map[uintptr]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrIntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrIntfX(vp *map[uintptr]interface{}, d *Decoder) {
+ if v, changed := f.DecMapUintptrIntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrIntfV(v map[uintptr]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrIntfV(v map[uintptr]interface{}, canChange bool,
d *Decoder) (_ map[uintptr]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[uintptr]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk uintptr
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrStringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]string)
- v, changed := fastpathTV.DecMapUintptrStringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrStringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]string)
+ if v, changed := fastpathTV.DecMapUintptrStringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]string)
- fastpathTV.DecMapUintptrStringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrStringV(rv2i(rv).(map[uintptr]string), false, d)
}
-func (f fastpathT) DecMapUintptrStringX(vp *map[uintptr]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrStringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrStringX(vp *map[uintptr]string, d *Decoder) {
+ if v, changed := f.DecMapUintptrStringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrStringV(v map[uintptr]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrStringV(v map[uintptr]string, canChange bool,
d *Decoder) (_ map[uintptr]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[uintptr]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uintptr
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrUintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]uint)
- v, changed := fastpathTV.DecMapUintptrUintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrUintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]uint)
+ if v, changed := fastpathTV.DecMapUintptrUintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]uint)
- fastpathTV.DecMapUintptrUintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrUintV(rv2i(rv).(map[uintptr]uint), false, d)
}
-func (f fastpathT) DecMapUintptrUintX(vp *map[uintptr]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrUintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrUintX(vp *map[uintptr]uint, d *Decoder) {
+ if v, changed := f.DecMapUintptrUintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrUintV(v map[uintptr]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrUintV(v map[uintptr]uint, canChange bool,
d *Decoder) (_ map[uintptr]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uintptr]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uintptr
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrUint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]uint8)
- v, changed := fastpathTV.DecMapUintptrUint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrUint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]uint8)
+ if v, changed := fastpathTV.DecMapUintptrUint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]uint8)
- fastpathTV.DecMapUintptrUint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrUint8V(rv2i(rv).(map[uintptr]uint8), false, d)
}
-func (f fastpathT) DecMapUintptrUint8X(vp *map[uintptr]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrUint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrUint8X(vp *map[uintptr]uint8, d *Decoder) {
+ if v, changed := f.DecMapUintptrUint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrUint8V(v map[uintptr]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrUint8V(v map[uintptr]uint8, canChange bool,
d *Decoder) (_ map[uintptr]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[uintptr]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uintptr
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrUint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]uint16)
- v, changed := fastpathTV.DecMapUintptrUint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrUint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]uint16)
+ if v, changed := fastpathTV.DecMapUintptrUint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]uint16)
- fastpathTV.DecMapUintptrUint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrUint16V(rv2i(rv).(map[uintptr]uint16), false, d)
}
-func (f fastpathT) DecMapUintptrUint16X(vp *map[uintptr]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrUint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrUint16X(vp *map[uintptr]uint16, d *Decoder) {
+ if v, changed := f.DecMapUintptrUint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrUint16V(v map[uintptr]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrUint16V(v map[uintptr]uint16, canChange bool,
d *Decoder) (_ map[uintptr]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[uintptr]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uintptr
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrUint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]uint32)
- v, changed := fastpathTV.DecMapUintptrUint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrUint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]uint32)
+ if v, changed := fastpathTV.DecMapUintptrUint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]uint32)
- fastpathTV.DecMapUintptrUint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrUint32V(rv2i(rv).(map[uintptr]uint32), false, d)
}
-func (f fastpathT) DecMapUintptrUint32X(vp *map[uintptr]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrUint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrUint32X(vp *map[uintptr]uint32, d *Decoder) {
+ if v, changed := f.DecMapUintptrUint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrUint32V(v map[uintptr]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrUint32V(v map[uintptr]uint32, canChange bool,
d *Decoder) (_ map[uintptr]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[uintptr]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uintptr
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrUint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]uint64)
- v, changed := fastpathTV.DecMapUintptrUint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrUint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]uint64)
+ if v, changed := fastpathTV.DecMapUintptrUint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]uint64)
- fastpathTV.DecMapUintptrUint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrUint64V(rv2i(rv).(map[uintptr]uint64), false, d)
}
-func (f fastpathT) DecMapUintptrUint64X(vp *map[uintptr]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrUint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrUint64X(vp *map[uintptr]uint64, d *Decoder) {
+ if v, changed := f.DecMapUintptrUint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrUint64V(v map[uintptr]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrUint64V(v map[uintptr]uint64, canChange bool,
d *Decoder) (_ map[uintptr]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uintptr]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uintptr
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrUintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]uintptr)
- v, changed := fastpathTV.DecMapUintptrUintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrUintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]uintptr)
+ if v, changed := fastpathTV.DecMapUintptrUintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]uintptr)
- fastpathTV.DecMapUintptrUintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrUintptrV(rv2i(rv).(map[uintptr]uintptr), false, d)
}
-func (f fastpathT) DecMapUintptrUintptrX(vp *map[uintptr]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrUintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrUintptrX(vp *map[uintptr]uintptr, d *Decoder) {
+ if v, changed := f.DecMapUintptrUintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrUintptrV(v map[uintptr]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrUintptrV(v map[uintptr]uintptr, canChange bool,
d *Decoder) (_ map[uintptr]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uintptr]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uintptr
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrIntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]int)
- v, changed := fastpathTV.DecMapUintptrIntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrIntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]int)
+ if v, changed := fastpathTV.DecMapUintptrIntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]int)
- fastpathTV.DecMapUintptrIntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrIntV(rv2i(rv).(map[uintptr]int), false, d)
}
-func (f fastpathT) DecMapUintptrIntX(vp *map[uintptr]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrIntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrIntX(vp *map[uintptr]int, d *Decoder) {
+ if v, changed := f.DecMapUintptrIntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrIntV(v map[uintptr]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrIntV(v map[uintptr]int, canChange bool,
d *Decoder) (_ map[uintptr]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uintptr]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uintptr
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrInt8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]int8)
- v, changed := fastpathTV.DecMapUintptrInt8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrInt8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]int8)
+ if v, changed := fastpathTV.DecMapUintptrInt8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]int8)
- fastpathTV.DecMapUintptrInt8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrInt8V(rv2i(rv).(map[uintptr]int8), false, d)
}
-func (f fastpathT) DecMapUintptrInt8X(vp *map[uintptr]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrInt8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrInt8X(vp *map[uintptr]int8, d *Decoder) {
+ if v, changed := f.DecMapUintptrInt8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrInt8V(v map[uintptr]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrInt8V(v map[uintptr]int8, canChange bool,
d *Decoder) (_ map[uintptr]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[uintptr]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uintptr
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrInt16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]int16)
- v, changed := fastpathTV.DecMapUintptrInt16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrInt16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]int16)
+ if v, changed := fastpathTV.DecMapUintptrInt16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]int16)
- fastpathTV.DecMapUintptrInt16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrInt16V(rv2i(rv).(map[uintptr]int16), false, d)
}
-func (f fastpathT) DecMapUintptrInt16X(vp *map[uintptr]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrInt16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrInt16X(vp *map[uintptr]int16, d *Decoder) {
+ if v, changed := f.DecMapUintptrInt16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrInt16V(v map[uintptr]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrInt16V(v map[uintptr]int16, canChange bool,
d *Decoder) (_ map[uintptr]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[uintptr]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uintptr
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrInt32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]int32)
- v, changed := fastpathTV.DecMapUintptrInt32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrInt32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]int32)
+ if v, changed := fastpathTV.DecMapUintptrInt32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]int32)
- fastpathTV.DecMapUintptrInt32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrInt32V(rv2i(rv).(map[uintptr]int32), false, d)
}
-func (f fastpathT) DecMapUintptrInt32X(vp *map[uintptr]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrInt32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrInt32X(vp *map[uintptr]int32, d *Decoder) {
+ if v, changed := f.DecMapUintptrInt32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrInt32V(v map[uintptr]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrInt32V(v map[uintptr]int32, canChange bool,
d *Decoder) (_ map[uintptr]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[uintptr]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uintptr
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrInt64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]int64)
- v, changed := fastpathTV.DecMapUintptrInt64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrInt64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]int64)
+ if v, changed := fastpathTV.DecMapUintptrInt64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]int64)
- fastpathTV.DecMapUintptrInt64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrInt64V(rv2i(rv).(map[uintptr]int64), false, d)
}
-func (f fastpathT) DecMapUintptrInt64X(vp *map[uintptr]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrInt64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrInt64X(vp *map[uintptr]int64, d *Decoder) {
+ if v, changed := f.DecMapUintptrInt64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrInt64V(v map[uintptr]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrInt64V(v map[uintptr]int64, canChange bool,
d *Decoder) (_ map[uintptr]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uintptr]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uintptr
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrFloat32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]float32)
- v, changed := fastpathTV.DecMapUintptrFloat32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrFloat32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]float32)
+ if v, changed := fastpathTV.DecMapUintptrFloat32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]float32)
- fastpathTV.DecMapUintptrFloat32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrFloat32V(rv2i(rv).(map[uintptr]float32), false, d)
}
-func (f fastpathT) DecMapUintptrFloat32X(vp *map[uintptr]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrFloat32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrFloat32X(vp *map[uintptr]float32, d *Decoder) {
+ if v, changed := f.DecMapUintptrFloat32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrFloat32V(v map[uintptr]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrFloat32V(v map[uintptr]float32, canChange bool,
d *Decoder) (_ map[uintptr]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[uintptr]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uintptr
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrFloat64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]float64)
- v, changed := fastpathTV.DecMapUintptrFloat64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrFloat64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]float64)
+ if v, changed := fastpathTV.DecMapUintptrFloat64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]float64)
- fastpathTV.DecMapUintptrFloat64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrFloat64V(rv2i(rv).(map[uintptr]float64), false, d)
}
-func (f fastpathT) DecMapUintptrFloat64X(vp *map[uintptr]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrFloat64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrFloat64X(vp *map[uintptr]float64, d *Decoder) {
+ if v, changed := f.DecMapUintptrFloat64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrFloat64V(v map[uintptr]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrFloat64V(v map[uintptr]float64, canChange bool,
d *Decoder) (_ map[uintptr]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[uintptr]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uintptr
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapUintptrBoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[uintptr]bool)
- v, changed := fastpathTV.DecMapUintptrBoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapUintptrBoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[uintptr]bool)
+ if v, changed := fastpathTV.DecMapUintptrBoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[uintptr]bool)
- fastpathTV.DecMapUintptrBoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapUintptrBoolV(rv2i(rv).(map[uintptr]bool), false, d)
}
-func (f fastpathT) DecMapUintptrBoolX(vp *map[uintptr]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapUintptrBoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapUintptrBoolX(vp *map[uintptr]bool, d *Decoder) {
+ if v, changed := f.DecMapUintptrBoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapUintptrBoolV(v map[uintptr]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapUintptrBoolV(v map[uintptr]bool, canChange bool,
d *Decoder) (_ map[uintptr]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[uintptr]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk uintptr
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = uintptr(dd.DecodeUint(uintBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = uintptr(dd.DecodeUint(uintBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntIntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]interface{})
- v, changed := fastpathTV.DecMapIntIntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntIntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]interface{})
+ if v, changed := fastpathTV.DecMapIntIntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]interface{})
- fastpathTV.DecMapIntIntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntIntfV(rv2i(rv).(map[int]interface{}), false, d)
}
-func (f fastpathT) DecMapIntIntfX(vp *map[int]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntIntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntIntfX(vp *map[int]interface{}, d *Decoder) {
+ if v, changed := f.DecMapIntIntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntIntfV(v map[int]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntIntfV(v map[int]interface{}, canChange bool,
d *Decoder) (_ map[int]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[int]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk int
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntStringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]string)
- v, changed := fastpathTV.DecMapIntStringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntStringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]string)
+ if v, changed := fastpathTV.DecMapIntStringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]string)
- fastpathTV.DecMapIntStringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntStringV(rv2i(rv).(map[int]string), false, d)
}
-func (f fastpathT) DecMapIntStringX(vp *map[int]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntStringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntStringX(vp *map[int]string, d *Decoder) {
+ if v, changed := f.DecMapIntStringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntStringV(v map[int]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntStringV(v map[int]string, canChange bool,
d *Decoder) (_ map[int]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[int]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntUintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]uint)
- v, changed := fastpathTV.DecMapIntUintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntUintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]uint)
+ if v, changed := fastpathTV.DecMapIntUintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]uint)
- fastpathTV.DecMapIntUintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntUintV(rv2i(rv).(map[int]uint), false, d)
}
-func (f fastpathT) DecMapIntUintX(vp *map[int]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntUintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntUintX(vp *map[int]uint, d *Decoder) {
+ if v, changed := f.DecMapIntUintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntUintV(v map[int]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntUintV(v map[int]uint, canChange bool,
d *Decoder) (_ map[int]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[int]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntUint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]uint8)
- v, changed := fastpathTV.DecMapIntUint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntUint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]uint8)
+ if v, changed := fastpathTV.DecMapIntUint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]uint8)
- fastpathTV.DecMapIntUint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntUint8V(rv2i(rv).(map[int]uint8), false, d)
}
-func (f fastpathT) DecMapIntUint8X(vp *map[int]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntUint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntUint8X(vp *map[int]uint8, d *Decoder) {
+ if v, changed := f.DecMapIntUint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntUint8V(v map[int]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntUint8V(v map[int]uint8, canChange bool,
d *Decoder) (_ map[int]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[int]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntUint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]uint16)
- v, changed := fastpathTV.DecMapIntUint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntUint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]uint16)
+ if v, changed := fastpathTV.DecMapIntUint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]uint16)
- fastpathTV.DecMapIntUint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntUint16V(rv2i(rv).(map[int]uint16), false, d)
}
-func (f fastpathT) DecMapIntUint16X(vp *map[int]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntUint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntUint16X(vp *map[int]uint16, d *Decoder) {
+ if v, changed := f.DecMapIntUint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntUint16V(v map[int]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntUint16V(v map[int]uint16, canChange bool,
d *Decoder) (_ map[int]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[int]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntUint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]uint32)
- v, changed := fastpathTV.DecMapIntUint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntUint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]uint32)
+ if v, changed := fastpathTV.DecMapIntUint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]uint32)
- fastpathTV.DecMapIntUint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntUint32V(rv2i(rv).(map[int]uint32), false, d)
}
-func (f fastpathT) DecMapIntUint32X(vp *map[int]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntUint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntUint32X(vp *map[int]uint32, d *Decoder) {
+ if v, changed := f.DecMapIntUint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntUint32V(v map[int]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntUint32V(v map[int]uint32, canChange bool,
d *Decoder) (_ map[int]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[int]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntUint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]uint64)
- v, changed := fastpathTV.DecMapIntUint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntUint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]uint64)
+ if v, changed := fastpathTV.DecMapIntUint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]uint64)
- fastpathTV.DecMapIntUint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntUint64V(rv2i(rv).(map[int]uint64), false, d)
}
-func (f fastpathT) DecMapIntUint64X(vp *map[int]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntUint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntUint64X(vp *map[int]uint64, d *Decoder) {
+ if v, changed := f.DecMapIntUint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntUint64V(v map[int]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntUint64V(v map[int]uint64, canChange bool,
d *Decoder) (_ map[int]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[int]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntUintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]uintptr)
- v, changed := fastpathTV.DecMapIntUintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntUintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]uintptr)
+ if v, changed := fastpathTV.DecMapIntUintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]uintptr)
- fastpathTV.DecMapIntUintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntUintptrV(rv2i(rv).(map[int]uintptr), false, d)
}
-func (f fastpathT) DecMapIntUintptrX(vp *map[int]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntUintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntUintptrX(vp *map[int]uintptr, d *Decoder) {
+ if v, changed := f.DecMapIntUintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntUintptrV(v map[int]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntUintptrV(v map[int]uintptr, canChange bool,
d *Decoder) (_ map[int]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[int]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntIntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]int)
- v, changed := fastpathTV.DecMapIntIntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntIntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]int)
+ if v, changed := fastpathTV.DecMapIntIntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]int)
- fastpathTV.DecMapIntIntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntIntV(rv2i(rv).(map[int]int), false, d)
}
-func (f fastpathT) DecMapIntIntX(vp *map[int]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntIntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntIntX(vp *map[int]int, d *Decoder) {
+ if v, changed := f.DecMapIntIntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntIntV(v map[int]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntIntV(v map[int]int, canChange bool,
d *Decoder) (_ map[int]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[int]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntInt8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]int8)
- v, changed := fastpathTV.DecMapIntInt8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntInt8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]int8)
+ if v, changed := fastpathTV.DecMapIntInt8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]int8)
- fastpathTV.DecMapIntInt8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntInt8V(rv2i(rv).(map[int]int8), false, d)
}
-func (f fastpathT) DecMapIntInt8X(vp *map[int]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntInt8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntInt8X(vp *map[int]int8, d *Decoder) {
+ if v, changed := f.DecMapIntInt8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntInt8V(v map[int]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntInt8V(v map[int]int8, canChange bool,
d *Decoder) (_ map[int]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[int]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntInt16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]int16)
- v, changed := fastpathTV.DecMapIntInt16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntInt16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]int16)
+ if v, changed := fastpathTV.DecMapIntInt16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]int16)
- fastpathTV.DecMapIntInt16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntInt16V(rv2i(rv).(map[int]int16), false, d)
}
-func (f fastpathT) DecMapIntInt16X(vp *map[int]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntInt16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntInt16X(vp *map[int]int16, d *Decoder) {
+ if v, changed := f.DecMapIntInt16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntInt16V(v map[int]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntInt16V(v map[int]int16, canChange bool,
d *Decoder) (_ map[int]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[int]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntInt32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]int32)
- v, changed := fastpathTV.DecMapIntInt32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntInt32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]int32)
+ if v, changed := fastpathTV.DecMapIntInt32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]int32)
- fastpathTV.DecMapIntInt32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntInt32V(rv2i(rv).(map[int]int32), false, d)
}
-func (f fastpathT) DecMapIntInt32X(vp *map[int]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntInt32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntInt32X(vp *map[int]int32, d *Decoder) {
+ if v, changed := f.DecMapIntInt32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntInt32V(v map[int]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntInt32V(v map[int]int32, canChange bool,
d *Decoder) (_ map[int]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[int]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntInt64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]int64)
- v, changed := fastpathTV.DecMapIntInt64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntInt64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]int64)
+ if v, changed := fastpathTV.DecMapIntInt64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]int64)
- fastpathTV.DecMapIntInt64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntInt64V(rv2i(rv).(map[int]int64), false, d)
}
-func (f fastpathT) DecMapIntInt64X(vp *map[int]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntInt64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntInt64X(vp *map[int]int64, d *Decoder) {
+ if v, changed := f.DecMapIntInt64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntInt64V(v map[int]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntInt64V(v map[int]int64, canChange bool,
d *Decoder) (_ map[int]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[int]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntFloat32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]float32)
- v, changed := fastpathTV.DecMapIntFloat32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntFloat32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]float32)
+ if v, changed := fastpathTV.DecMapIntFloat32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]float32)
- fastpathTV.DecMapIntFloat32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntFloat32V(rv2i(rv).(map[int]float32), false, d)
}
-func (f fastpathT) DecMapIntFloat32X(vp *map[int]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntFloat32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntFloat32X(vp *map[int]float32, d *Decoder) {
+ if v, changed := f.DecMapIntFloat32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntFloat32V(v map[int]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntFloat32V(v map[int]float32, canChange bool,
d *Decoder) (_ map[int]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[int]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntFloat64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]float64)
- v, changed := fastpathTV.DecMapIntFloat64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntFloat64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]float64)
+ if v, changed := fastpathTV.DecMapIntFloat64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]float64)
- fastpathTV.DecMapIntFloat64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntFloat64V(rv2i(rv).(map[int]float64), false, d)
}
-func (f fastpathT) DecMapIntFloat64X(vp *map[int]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntFloat64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntFloat64X(vp *map[int]float64, d *Decoder) {
+ if v, changed := f.DecMapIntFloat64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntFloat64V(v map[int]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntFloat64V(v map[int]float64, canChange bool,
d *Decoder) (_ map[int]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[int]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapIntBoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int]bool)
- v, changed := fastpathTV.DecMapIntBoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapIntBoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int]bool)
+ if v, changed := fastpathTV.DecMapIntBoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int]bool)
- fastpathTV.DecMapIntBoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapIntBoolV(rv2i(rv).(map[int]bool), false, d)
}
-func (f fastpathT) DecMapIntBoolX(vp *map[int]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapIntBoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapIntBoolX(vp *map[int]bool, d *Decoder) {
+ if v, changed := f.DecMapIntBoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapIntBoolV(v map[int]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapIntBoolV(v map[int]bool, canChange bool,
d *Decoder) (_ map[int]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[int]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int(dd.DecodeInt(intBitsize))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int(dd.DecodeInt(intBitsize))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8IntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]interface{})
- v, changed := fastpathTV.DecMapInt8IntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8IntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]interface{})
+ if v, changed := fastpathTV.DecMapInt8IntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]interface{})
- fastpathTV.DecMapInt8IntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8IntfV(rv2i(rv).(map[int8]interface{}), false, d)
}
-func (f fastpathT) DecMapInt8IntfX(vp *map[int8]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8IntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8IntfX(vp *map[int8]interface{}, d *Decoder) {
+ if v, changed := f.DecMapInt8IntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8IntfV(v map[int8]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8IntfV(v map[int8]interface{}, canChange bool,
d *Decoder) (_ map[int8]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 17)
v = make(map[int8]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk int8
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8StringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]string)
- v, changed := fastpathTV.DecMapInt8StringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8StringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]string)
+ if v, changed := fastpathTV.DecMapInt8StringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]string)
- fastpathTV.DecMapInt8StringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8StringV(rv2i(rv).(map[int8]string), false, d)
}
-func (f fastpathT) DecMapInt8StringX(vp *map[int8]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8StringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8StringX(vp *map[int8]string, d *Decoder) {
+ if v, changed := f.DecMapInt8StringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8StringV(v map[int8]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8StringV(v map[int8]string, canChange bool,
d *Decoder) (_ map[int8]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 17)
v = make(map[int8]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int8
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8UintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]uint)
- v, changed := fastpathTV.DecMapInt8UintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8UintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]uint)
+ if v, changed := fastpathTV.DecMapInt8UintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]uint)
- fastpathTV.DecMapInt8UintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8UintV(rv2i(rv).(map[int8]uint), false, d)
}
-func (f fastpathT) DecMapInt8UintX(vp *map[int8]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8UintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8UintX(vp *map[int8]uint, d *Decoder) {
+ if v, changed := f.DecMapInt8UintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8UintV(v map[int8]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8UintV(v map[int8]uint, canChange bool,
d *Decoder) (_ map[int8]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[int8]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int8
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8Uint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]uint8)
- v, changed := fastpathTV.DecMapInt8Uint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8Uint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]uint8)
+ if v, changed := fastpathTV.DecMapInt8Uint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]uint8)
- fastpathTV.DecMapInt8Uint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8Uint8V(rv2i(rv).(map[int8]uint8), false, d)
}
-func (f fastpathT) DecMapInt8Uint8X(vp *map[int8]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8Uint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8Uint8X(vp *map[int8]uint8, d *Decoder) {
+ if v, changed := f.DecMapInt8Uint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8Uint8V(v map[int8]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8Uint8V(v map[int8]uint8, canChange bool,
d *Decoder) (_ map[int8]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 2)
v = make(map[int8]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int8
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8Uint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]uint16)
- v, changed := fastpathTV.DecMapInt8Uint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8Uint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]uint16)
+ if v, changed := fastpathTV.DecMapInt8Uint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]uint16)
- fastpathTV.DecMapInt8Uint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8Uint16V(rv2i(rv).(map[int8]uint16), false, d)
}
-func (f fastpathT) DecMapInt8Uint16X(vp *map[int8]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8Uint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8Uint16X(vp *map[int8]uint16, d *Decoder) {
+ if v, changed := f.DecMapInt8Uint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8Uint16V(v map[int8]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8Uint16V(v map[int8]uint16, canChange bool,
d *Decoder) (_ map[int8]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 3)
v = make(map[int8]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int8
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8Uint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]uint32)
- v, changed := fastpathTV.DecMapInt8Uint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8Uint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]uint32)
+ if v, changed := fastpathTV.DecMapInt8Uint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]uint32)
- fastpathTV.DecMapInt8Uint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8Uint32V(rv2i(rv).(map[int8]uint32), false, d)
}
-func (f fastpathT) DecMapInt8Uint32X(vp *map[int8]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8Uint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8Uint32X(vp *map[int8]uint32, d *Decoder) {
+ if v, changed := f.DecMapInt8Uint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8Uint32V(v map[int8]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8Uint32V(v map[int8]uint32, canChange bool,
d *Decoder) (_ map[int8]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[int8]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int8
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8Uint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]uint64)
- v, changed := fastpathTV.DecMapInt8Uint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8Uint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]uint64)
+ if v, changed := fastpathTV.DecMapInt8Uint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]uint64)
- fastpathTV.DecMapInt8Uint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8Uint64V(rv2i(rv).(map[int8]uint64), false, d)
}
-func (f fastpathT) DecMapInt8Uint64X(vp *map[int8]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8Uint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8Uint64X(vp *map[int8]uint64, d *Decoder) {
+ if v, changed := f.DecMapInt8Uint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8Uint64V(v map[int8]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8Uint64V(v map[int8]uint64, canChange bool,
d *Decoder) (_ map[int8]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[int8]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int8
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8UintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]uintptr)
- v, changed := fastpathTV.DecMapInt8UintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8UintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]uintptr)
+ if v, changed := fastpathTV.DecMapInt8UintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]uintptr)
- fastpathTV.DecMapInt8UintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8UintptrV(rv2i(rv).(map[int8]uintptr), false, d)
}
-func (f fastpathT) DecMapInt8UintptrX(vp *map[int8]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8UintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8UintptrX(vp *map[int8]uintptr, d *Decoder) {
+ if v, changed := f.DecMapInt8UintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8UintptrV(v map[int8]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8UintptrV(v map[int8]uintptr, canChange bool,
d *Decoder) (_ map[int8]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[int8]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int8
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8IntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]int)
- v, changed := fastpathTV.DecMapInt8IntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8IntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]int)
+ if v, changed := fastpathTV.DecMapInt8IntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]int)
- fastpathTV.DecMapInt8IntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8IntV(rv2i(rv).(map[int8]int), false, d)
}
-func (f fastpathT) DecMapInt8IntX(vp *map[int8]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8IntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8IntX(vp *map[int8]int, d *Decoder) {
+ if v, changed := f.DecMapInt8IntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8IntV(v map[int8]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8IntV(v map[int8]int, canChange bool,
d *Decoder) (_ map[int8]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[int8]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int8
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8Int8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]int8)
- v, changed := fastpathTV.DecMapInt8Int8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8Int8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]int8)
+ if v, changed := fastpathTV.DecMapInt8Int8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]int8)
- fastpathTV.DecMapInt8Int8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8Int8V(rv2i(rv).(map[int8]int8), false, d)
}
-func (f fastpathT) DecMapInt8Int8X(vp *map[int8]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8Int8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8Int8X(vp *map[int8]int8, d *Decoder) {
+ if v, changed := f.DecMapInt8Int8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8Int8V(v map[int8]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8Int8V(v map[int8]int8, canChange bool,
d *Decoder) (_ map[int8]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 2)
v = make(map[int8]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int8
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8Int16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]int16)
- v, changed := fastpathTV.DecMapInt8Int16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8Int16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]int16)
+ if v, changed := fastpathTV.DecMapInt8Int16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]int16)
- fastpathTV.DecMapInt8Int16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8Int16V(rv2i(rv).(map[int8]int16), false, d)
}
-func (f fastpathT) DecMapInt8Int16X(vp *map[int8]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8Int16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8Int16X(vp *map[int8]int16, d *Decoder) {
+ if v, changed := f.DecMapInt8Int16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8Int16V(v map[int8]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8Int16V(v map[int8]int16, canChange bool,
d *Decoder) (_ map[int8]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 3)
v = make(map[int8]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int8
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8Int32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]int32)
- v, changed := fastpathTV.DecMapInt8Int32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8Int32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]int32)
+ if v, changed := fastpathTV.DecMapInt8Int32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]int32)
- fastpathTV.DecMapInt8Int32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8Int32V(rv2i(rv).(map[int8]int32), false, d)
}
-func (f fastpathT) DecMapInt8Int32X(vp *map[int8]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8Int32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8Int32X(vp *map[int8]int32, d *Decoder) {
+ if v, changed := f.DecMapInt8Int32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8Int32V(v map[int8]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8Int32V(v map[int8]int32, canChange bool,
d *Decoder) (_ map[int8]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[int8]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int8
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8Int64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]int64)
- v, changed := fastpathTV.DecMapInt8Int64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8Int64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]int64)
+ if v, changed := fastpathTV.DecMapInt8Int64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]int64)
- fastpathTV.DecMapInt8Int64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8Int64V(rv2i(rv).(map[int8]int64), false, d)
}
-func (f fastpathT) DecMapInt8Int64X(vp *map[int8]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8Int64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8Int64X(vp *map[int8]int64, d *Decoder) {
+ if v, changed := f.DecMapInt8Int64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8Int64V(v map[int8]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8Int64V(v map[int8]int64, canChange bool,
d *Decoder) (_ map[int8]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[int8]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int8
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8Float32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]float32)
- v, changed := fastpathTV.DecMapInt8Float32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8Float32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]float32)
+ if v, changed := fastpathTV.DecMapInt8Float32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]float32)
- fastpathTV.DecMapInt8Float32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8Float32V(rv2i(rv).(map[int8]float32), false, d)
}
-func (f fastpathT) DecMapInt8Float32X(vp *map[int8]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8Float32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8Float32X(vp *map[int8]float32, d *Decoder) {
+ if v, changed := f.DecMapInt8Float32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8Float32V(v map[int8]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8Float32V(v map[int8]float32, canChange bool,
d *Decoder) (_ map[int8]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[int8]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int8
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8Float64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]float64)
- v, changed := fastpathTV.DecMapInt8Float64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8Float64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]float64)
+ if v, changed := fastpathTV.DecMapInt8Float64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]float64)
- fastpathTV.DecMapInt8Float64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8Float64V(rv2i(rv).(map[int8]float64), false, d)
}
-func (f fastpathT) DecMapInt8Float64X(vp *map[int8]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8Float64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8Float64X(vp *map[int8]float64, d *Decoder) {
+ if v, changed := f.DecMapInt8Float64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8Float64V(v map[int8]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8Float64V(v map[int8]float64, canChange bool,
d *Decoder) (_ map[int8]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[int8]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int8
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt8BoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int8]bool)
- v, changed := fastpathTV.DecMapInt8BoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt8BoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int8]bool)
+ if v, changed := fastpathTV.DecMapInt8BoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int8]bool)
- fastpathTV.DecMapInt8BoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt8BoolV(rv2i(rv).(map[int8]bool), false, d)
}
-func (f fastpathT) DecMapInt8BoolX(vp *map[int8]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt8BoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt8BoolX(vp *map[int8]bool, d *Decoder) {
+ if v, changed := f.DecMapInt8BoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt8BoolV(v map[int8]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt8BoolV(v map[int8]bool, canChange bool,
d *Decoder) (_ map[int8]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 2)
v = make(map[int8]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int8
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int8(dd.DecodeInt(8))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int8(dd.DecodeInt(8))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16IntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]interface{})
- v, changed := fastpathTV.DecMapInt16IntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16IntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]interface{})
+ if v, changed := fastpathTV.DecMapInt16IntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]interface{})
- fastpathTV.DecMapInt16IntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16IntfV(rv2i(rv).(map[int16]interface{}), false, d)
}
-func (f fastpathT) DecMapInt16IntfX(vp *map[int16]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16IntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16IntfX(vp *map[int16]interface{}, d *Decoder) {
+ if v, changed := f.DecMapInt16IntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16IntfV(v map[int16]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16IntfV(v map[int16]interface{}, canChange bool,
d *Decoder) (_ map[int16]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 18)
v = make(map[int16]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk int16
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16StringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]string)
- v, changed := fastpathTV.DecMapInt16StringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16StringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]string)
+ if v, changed := fastpathTV.DecMapInt16StringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]string)
- fastpathTV.DecMapInt16StringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16StringV(rv2i(rv).(map[int16]string), false, d)
}
-func (f fastpathT) DecMapInt16StringX(vp *map[int16]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16StringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16StringX(vp *map[int16]string, d *Decoder) {
+ if v, changed := f.DecMapInt16StringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16StringV(v map[int16]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16StringV(v map[int16]string, canChange bool,
d *Decoder) (_ map[int16]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 18)
v = make(map[int16]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int16
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16UintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]uint)
- v, changed := fastpathTV.DecMapInt16UintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16UintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]uint)
+ if v, changed := fastpathTV.DecMapInt16UintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]uint)
- fastpathTV.DecMapInt16UintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16UintV(rv2i(rv).(map[int16]uint), false, d)
}
-func (f fastpathT) DecMapInt16UintX(vp *map[int16]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16UintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16UintX(vp *map[int16]uint, d *Decoder) {
+ if v, changed := f.DecMapInt16UintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16UintV(v map[int16]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16UintV(v map[int16]uint, canChange bool,
d *Decoder) (_ map[int16]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[int16]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int16
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16Uint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]uint8)
- v, changed := fastpathTV.DecMapInt16Uint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16Uint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]uint8)
+ if v, changed := fastpathTV.DecMapInt16Uint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]uint8)
- fastpathTV.DecMapInt16Uint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16Uint8V(rv2i(rv).(map[int16]uint8), false, d)
}
-func (f fastpathT) DecMapInt16Uint8X(vp *map[int16]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16Uint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16Uint8X(vp *map[int16]uint8, d *Decoder) {
+ if v, changed := f.DecMapInt16Uint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16Uint8V(v map[int16]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16Uint8V(v map[int16]uint8, canChange bool,
d *Decoder) (_ map[int16]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 3)
v = make(map[int16]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int16
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16Uint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]uint16)
- v, changed := fastpathTV.DecMapInt16Uint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16Uint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]uint16)
+ if v, changed := fastpathTV.DecMapInt16Uint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]uint16)
- fastpathTV.DecMapInt16Uint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16Uint16V(rv2i(rv).(map[int16]uint16), false, d)
}
-func (f fastpathT) DecMapInt16Uint16X(vp *map[int16]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16Uint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16Uint16X(vp *map[int16]uint16, d *Decoder) {
+ if v, changed := f.DecMapInt16Uint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16Uint16V(v map[int16]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16Uint16V(v map[int16]uint16, canChange bool,
d *Decoder) (_ map[int16]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 4)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 4)
v = make(map[int16]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int16
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16Uint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]uint32)
- v, changed := fastpathTV.DecMapInt16Uint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16Uint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]uint32)
+ if v, changed := fastpathTV.DecMapInt16Uint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]uint32)
- fastpathTV.DecMapInt16Uint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16Uint32V(rv2i(rv).(map[int16]uint32), false, d)
}
-func (f fastpathT) DecMapInt16Uint32X(vp *map[int16]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16Uint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16Uint32X(vp *map[int16]uint32, d *Decoder) {
+ if v, changed := f.DecMapInt16Uint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16Uint32V(v map[int16]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16Uint32V(v map[int16]uint32, canChange bool,
d *Decoder) (_ map[int16]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 6)
v = make(map[int16]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int16
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16Uint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]uint64)
- v, changed := fastpathTV.DecMapInt16Uint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16Uint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]uint64)
+ if v, changed := fastpathTV.DecMapInt16Uint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]uint64)
- fastpathTV.DecMapInt16Uint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16Uint64V(rv2i(rv).(map[int16]uint64), false, d)
}
-func (f fastpathT) DecMapInt16Uint64X(vp *map[int16]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16Uint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16Uint64X(vp *map[int16]uint64, d *Decoder) {
+ if v, changed := f.DecMapInt16Uint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16Uint64V(v map[int16]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16Uint64V(v map[int16]uint64, canChange bool,
d *Decoder) (_ map[int16]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[int16]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int16
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16UintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]uintptr)
- v, changed := fastpathTV.DecMapInt16UintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16UintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]uintptr)
+ if v, changed := fastpathTV.DecMapInt16UintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]uintptr)
- fastpathTV.DecMapInt16UintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16UintptrV(rv2i(rv).(map[int16]uintptr), false, d)
}
-func (f fastpathT) DecMapInt16UintptrX(vp *map[int16]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16UintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16UintptrX(vp *map[int16]uintptr, d *Decoder) {
+ if v, changed := f.DecMapInt16UintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16UintptrV(v map[int16]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16UintptrV(v map[int16]uintptr, canChange bool,
d *Decoder) (_ map[int16]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[int16]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int16
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16IntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]int)
- v, changed := fastpathTV.DecMapInt16IntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16IntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]int)
+ if v, changed := fastpathTV.DecMapInt16IntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]int)
- fastpathTV.DecMapInt16IntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16IntV(rv2i(rv).(map[int16]int), false, d)
}
-func (f fastpathT) DecMapInt16IntX(vp *map[int16]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16IntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16IntX(vp *map[int16]int, d *Decoder) {
+ if v, changed := f.DecMapInt16IntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16IntV(v map[int16]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16IntV(v map[int16]int, canChange bool,
d *Decoder) (_ map[int16]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[int16]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int16
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16Int8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]int8)
- v, changed := fastpathTV.DecMapInt16Int8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16Int8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]int8)
+ if v, changed := fastpathTV.DecMapInt16Int8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]int8)
- fastpathTV.DecMapInt16Int8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16Int8V(rv2i(rv).(map[int16]int8), false, d)
}
-func (f fastpathT) DecMapInt16Int8X(vp *map[int16]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16Int8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16Int8X(vp *map[int16]int8, d *Decoder) {
+ if v, changed := f.DecMapInt16Int8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16Int8V(v map[int16]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16Int8V(v map[int16]int8, canChange bool,
d *Decoder) (_ map[int16]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 3)
v = make(map[int16]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int16
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16Int16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]int16)
- v, changed := fastpathTV.DecMapInt16Int16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16Int16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]int16)
+ if v, changed := fastpathTV.DecMapInt16Int16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]int16)
- fastpathTV.DecMapInt16Int16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16Int16V(rv2i(rv).(map[int16]int16), false, d)
}
-func (f fastpathT) DecMapInt16Int16X(vp *map[int16]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16Int16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16Int16X(vp *map[int16]int16, d *Decoder) {
+ if v, changed := f.DecMapInt16Int16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16Int16V(v map[int16]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16Int16V(v map[int16]int16, canChange bool,
d *Decoder) (_ map[int16]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 4)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 4)
v = make(map[int16]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int16
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16Int32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]int32)
- v, changed := fastpathTV.DecMapInt16Int32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16Int32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]int32)
+ if v, changed := fastpathTV.DecMapInt16Int32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]int32)
- fastpathTV.DecMapInt16Int32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16Int32V(rv2i(rv).(map[int16]int32), false, d)
}
-func (f fastpathT) DecMapInt16Int32X(vp *map[int16]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16Int32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16Int32X(vp *map[int16]int32, d *Decoder) {
+ if v, changed := f.DecMapInt16Int32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16Int32V(v map[int16]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16Int32V(v map[int16]int32, canChange bool,
d *Decoder) (_ map[int16]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 6)
v = make(map[int16]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int16
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16Int64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]int64)
- v, changed := fastpathTV.DecMapInt16Int64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16Int64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]int64)
+ if v, changed := fastpathTV.DecMapInt16Int64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]int64)
- fastpathTV.DecMapInt16Int64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16Int64V(rv2i(rv).(map[int16]int64), false, d)
}
-func (f fastpathT) DecMapInt16Int64X(vp *map[int16]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16Int64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16Int64X(vp *map[int16]int64, d *Decoder) {
+ if v, changed := f.DecMapInt16Int64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16Int64V(v map[int16]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16Int64V(v map[int16]int64, canChange bool,
d *Decoder) (_ map[int16]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[int16]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int16
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16Float32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]float32)
- v, changed := fastpathTV.DecMapInt16Float32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16Float32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]float32)
+ if v, changed := fastpathTV.DecMapInt16Float32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]float32)
- fastpathTV.DecMapInt16Float32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16Float32V(rv2i(rv).(map[int16]float32), false, d)
}
-func (f fastpathT) DecMapInt16Float32X(vp *map[int16]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16Float32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16Float32X(vp *map[int16]float32, d *Decoder) {
+ if v, changed := f.DecMapInt16Float32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16Float32V(v map[int16]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16Float32V(v map[int16]float32, canChange bool,
d *Decoder) (_ map[int16]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 6)
v = make(map[int16]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int16
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16Float64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]float64)
- v, changed := fastpathTV.DecMapInt16Float64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16Float64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]float64)
+ if v, changed := fastpathTV.DecMapInt16Float64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]float64)
- fastpathTV.DecMapInt16Float64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16Float64V(rv2i(rv).(map[int16]float64), false, d)
}
-func (f fastpathT) DecMapInt16Float64X(vp *map[int16]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16Float64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16Float64X(vp *map[int16]float64, d *Decoder) {
+ if v, changed := f.DecMapInt16Float64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16Float64V(v map[int16]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16Float64V(v map[int16]float64, canChange bool,
d *Decoder) (_ map[int16]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[int16]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int16
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt16BoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int16]bool)
- v, changed := fastpathTV.DecMapInt16BoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt16BoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int16]bool)
+ if v, changed := fastpathTV.DecMapInt16BoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int16]bool)
- fastpathTV.DecMapInt16BoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt16BoolV(rv2i(rv).(map[int16]bool), false, d)
}
-func (f fastpathT) DecMapInt16BoolX(vp *map[int16]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt16BoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt16BoolX(vp *map[int16]bool, d *Decoder) {
+ if v, changed := f.DecMapInt16BoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt16BoolV(v map[int16]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt16BoolV(v map[int16]bool, canChange bool,
d *Decoder) (_ map[int16]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 3)
v = make(map[int16]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int16
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int16(dd.DecodeInt(16))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int16(dd.DecodeInt(16))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32IntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]interface{})
- v, changed := fastpathTV.DecMapInt32IntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32IntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]interface{})
+ if v, changed := fastpathTV.DecMapInt32IntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]interface{})
- fastpathTV.DecMapInt32IntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32IntfV(rv2i(rv).(map[int32]interface{}), false, d)
}
-func (f fastpathT) DecMapInt32IntfX(vp *map[int32]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32IntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32IntfX(vp *map[int32]interface{}, d *Decoder) {
+ if v, changed := f.DecMapInt32IntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32IntfV(v map[int32]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32IntfV(v map[int32]interface{}, canChange bool,
d *Decoder) (_ map[int32]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 20)
v = make(map[int32]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk int32
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32StringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]string)
- v, changed := fastpathTV.DecMapInt32StringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32StringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]string)
+ if v, changed := fastpathTV.DecMapInt32StringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]string)
- fastpathTV.DecMapInt32StringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32StringV(rv2i(rv).(map[int32]string), false, d)
}
-func (f fastpathT) DecMapInt32StringX(vp *map[int32]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32StringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32StringX(vp *map[int32]string, d *Decoder) {
+ if v, changed := f.DecMapInt32StringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32StringV(v map[int32]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32StringV(v map[int32]string, canChange bool,
d *Decoder) (_ map[int32]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 20)
v = make(map[int32]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int32
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32UintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]uint)
- v, changed := fastpathTV.DecMapInt32UintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32UintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]uint)
+ if v, changed := fastpathTV.DecMapInt32UintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]uint)
- fastpathTV.DecMapInt32UintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32UintV(rv2i(rv).(map[int32]uint), false, d)
}
-func (f fastpathT) DecMapInt32UintX(vp *map[int32]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32UintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32UintX(vp *map[int32]uint, d *Decoder) {
+ if v, changed := f.DecMapInt32UintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32UintV(v map[int32]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32UintV(v map[int32]uint, canChange bool,
d *Decoder) (_ map[int32]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[int32]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int32
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32Uint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]uint8)
- v, changed := fastpathTV.DecMapInt32Uint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32Uint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]uint8)
+ if v, changed := fastpathTV.DecMapInt32Uint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]uint8)
- fastpathTV.DecMapInt32Uint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32Uint8V(rv2i(rv).(map[int32]uint8), false, d)
}
-func (f fastpathT) DecMapInt32Uint8X(vp *map[int32]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32Uint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32Uint8X(vp *map[int32]uint8, d *Decoder) {
+ if v, changed := f.DecMapInt32Uint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32Uint8V(v map[int32]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32Uint8V(v map[int32]uint8, canChange bool,
d *Decoder) (_ map[int32]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[int32]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int32
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32Uint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]uint16)
- v, changed := fastpathTV.DecMapInt32Uint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32Uint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]uint16)
+ if v, changed := fastpathTV.DecMapInt32Uint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]uint16)
- fastpathTV.DecMapInt32Uint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32Uint16V(rv2i(rv).(map[int32]uint16), false, d)
}
-func (f fastpathT) DecMapInt32Uint16X(vp *map[int32]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32Uint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32Uint16X(vp *map[int32]uint16, d *Decoder) {
+ if v, changed := f.DecMapInt32Uint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32Uint16V(v map[int32]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32Uint16V(v map[int32]uint16, canChange bool,
d *Decoder) (_ map[int32]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 6)
v = make(map[int32]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int32
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32Uint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]uint32)
- v, changed := fastpathTV.DecMapInt32Uint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32Uint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]uint32)
+ if v, changed := fastpathTV.DecMapInt32Uint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]uint32)
- fastpathTV.DecMapInt32Uint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32Uint32V(rv2i(rv).(map[int32]uint32), false, d)
}
-func (f fastpathT) DecMapInt32Uint32X(vp *map[int32]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32Uint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32Uint32X(vp *map[int32]uint32, d *Decoder) {
+ if v, changed := f.DecMapInt32Uint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32Uint32V(v map[int32]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32Uint32V(v map[int32]uint32, canChange bool,
d *Decoder) (_ map[int32]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 8)
v = make(map[int32]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int32
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32Uint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]uint64)
- v, changed := fastpathTV.DecMapInt32Uint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32Uint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]uint64)
+ if v, changed := fastpathTV.DecMapInt32Uint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]uint64)
- fastpathTV.DecMapInt32Uint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32Uint64V(rv2i(rv).(map[int32]uint64), false, d)
}
-func (f fastpathT) DecMapInt32Uint64X(vp *map[int32]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32Uint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32Uint64X(vp *map[int32]uint64, d *Decoder) {
+ if v, changed := f.DecMapInt32Uint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32Uint64V(v map[int32]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32Uint64V(v map[int32]uint64, canChange bool,
d *Decoder) (_ map[int32]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[int32]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int32
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32UintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]uintptr)
- v, changed := fastpathTV.DecMapInt32UintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32UintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]uintptr)
+ if v, changed := fastpathTV.DecMapInt32UintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]uintptr)
- fastpathTV.DecMapInt32UintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32UintptrV(rv2i(rv).(map[int32]uintptr), false, d)
}
-func (f fastpathT) DecMapInt32UintptrX(vp *map[int32]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32UintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32UintptrX(vp *map[int32]uintptr, d *Decoder) {
+ if v, changed := f.DecMapInt32UintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32UintptrV(v map[int32]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32UintptrV(v map[int32]uintptr, canChange bool,
d *Decoder) (_ map[int32]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[int32]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int32
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32IntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]int)
- v, changed := fastpathTV.DecMapInt32IntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32IntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]int)
+ if v, changed := fastpathTV.DecMapInt32IntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]int)
- fastpathTV.DecMapInt32IntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32IntV(rv2i(rv).(map[int32]int), false, d)
}
-func (f fastpathT) DecMapInt32IntX(vp *map[int32]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32IntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32IntX(vp *map[int32]int, d *Decoder) {
+ if v, changed := f.DecMapInt32IntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32IntV(v map[int32]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32IntV(v map[int32]int, canChange bool,
d *Decoder) (_ map[int32]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[int32]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int32
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32Int8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]int8)
- v, changed := fastpathTV.DecMapInt32Int8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32Int8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]int8)
+ if v, changed := fastpathTV.DecMapInt32Int8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]int8)
- fastpathTV.DecMapInt32Int8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32Int8V(rv2i(rv).(map[int32]int8), false, d)
}
-func (f fastpathT) DecMapInt32Int8X(vp *map[int32]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32Int8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32Int8X(vp *map[int32]int8, d *Decoder) {
+ if v, changed := f.DecMapInt32Int8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32Int8V(v map[int32]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32Int8V(v map[int32]int8, canChange bool,
d *Decoder) (_ map[int32]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[int32]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int32
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32Int16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]int16)
- v, changed := fastpathTV.DecMapInt32Int16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32Int16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]int16)
+ if v, changed := fastpathTV.DecMapInt32Int16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]int16)
- fastpathTV.DecMapInt32Int16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32Int16V(rv2i(rv).(map[int32]int16), false, d)
}
-func (f fastpathT) DecMapInt32Int16X(vp *map[int32]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32Int16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32Int16X(vp *map[int32]int16, d *Decoder) {
+ if v, changed := f.DecMapInt32Int16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32Int16V(v map[int32]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32Int16V(v map[int32]int16, canChange bool,
d *Decoder) (_ map[int32]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 6)
v = make(map[int32]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int32
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32Int32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]int32)
- v, changed := fastpathTV.DecMapInt32Int32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32Int32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]int32)
+ if v, changed := fastpathTV.DecMapInt32Int32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]int32)
- fastpathTV.DecMapInt32Int32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32Int32V(rv2i(rv).(map[int32]int32), false, d)
}
-func (f fastpathT) DecMapInt32Int32X(vp *map[int32]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32Int32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32Int32X(vp *map[int32]int32, d *Decoder) {
+ if v, changed := f.DecMapInt32Int32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32Int32V(v map[int32]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32Int32V(v map[int32]int32, canChange bool,
d *Decoder) (_ map[int32]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 8)
v = make(map[int32]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int32
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32Int64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]int64)
- v, changed := fastpathTV.DecMapInt32Int64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32Int64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]int64)
+ if v, changed := fastpathTV.DecMapInt32Int64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]int64)
- fastpathTV.DecMapInt32Int64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32Int64V(rv2i(rv).(map[int32]int64), false, d)
}
-func (f fastpathT) DecMapInt32Int64X(vp *map[int32]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32Int64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32Int64X(vp *map[int32]int64, d *Decoder) {
+ if v, changed := f.DecMapInt32Int64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32Int64V(v map[int32]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32Int64V(v map[int32]int64, canChange bool,
d *Decoder) (_ map[int32]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[int32]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int32
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32Float32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]float32)
- v, changed := fastpathTV.DecMapInt32Float32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32Float32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]float32)
+ if v, changed := fastpathTV.DecMapInt32Float32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]float32)
- fastpathTV.DecMapInt32Float32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32Float32V(rv2i(rv).(map[int32]float32), false, d)
}
-func (f fastpathT) DecMapInt32Float32X(vp *map[int32]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32Float32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32Float32X(vp *map[int32]float32, d *Decoder) {
+ if v, changed := f.DecMapInt32Float32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32Float32V(v map[int32]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32Float32V(v map[int32]float32, canChange bool,
d *Decoder) (_ map[int32]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 8)
v = make(map[int32]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int32
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32Float64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]float64)
- v, changed := fastpathTV.DecMapInt32Float64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32Float64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]float64)
+ if v, changed := fastpathTV.DecMapInt32Float64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]float64)
- fastpathTV.DecMapInt32Float64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32Float64V(rv2i(rv).(map[int32]float64), false, d)
}
-func (f fastpathT) DecMapInt32Float64X(vp *map[int32]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32Float64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32Float64X(vp *map[int32]float64, d *Decoder) {
+ if v, changed := f.DecMapInt32Float64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32Float64V(v map[int32]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32Float64V(v map[int32]float64, canChange bool,
d *Decoder) (_ map[int32]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[int32]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int32
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt32BoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int32]bool)
- v, changed := fastpathTV.DecMapInt32BoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt32BoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int32]bool)
+ if v, changed := fastpathTV.DecMapInt32BoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int32]bool)
- fastpathTV.DecMapInt32BoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt32BoolV(rv2i(rv).(map[int32]bool), false, d)
}
-func (f fastpathT) DecMapInt32BoolX(vp *map[int32]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt32BoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt32BoolX(vp *map[int32]bool, d *Decoder) {
+ if v, changed := f.DecMapInt32BoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt32BoolV(v map[int32]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt32BoolV(v map[int32]bool, canChange bool,
d *Decoder) (_ map[int32]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[int32]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int32
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = int32(dd.DecodeInt(32))
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = int32(dd.DecodeInt(32))
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64IntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]interface{})
- v, changed := fastpathTV.DecMapInt64IntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64IntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]interface{})
+ if v, changed := fastpathTV.DecMapInt64IntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]interface{})
- fastpathTV.DecMapInt64IntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64IntfV(rv2i(rv).(map[int64]interface{}), false, d)
}
-func (f fastpathT) DecMapInt64IntfX(vp *map[int64]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64IntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64IntfX(vp *map[int64]interface{}, d *Decoder) {
+ if v, changed := f.DecMapInt64IntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64IntfV(v map[int64]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64IntfV(v map[int64]interface{}, canChange bool,
d *Decoder) (_ map[int64]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[int64]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk int64
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64StringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]string)
- v, changed := fastpathTV.DecMapInt64StringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64StringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]string)
+ if v, changed := fastpathTV.DecMapInt64StringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]string)
- fastpathTV.DecMapInt64StringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64StringV(rv2i(rv).(map[int64]string), false, d)
}
-func (f fastpathT) DecMapInt64StringX(vp *map[int64]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64StringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64StringX(vp *map[int64]string, d *Decoder) {
+ if v, changed := f.DecMapInt64StringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64StringV(v map[int64]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64StringV(v map[int64]string, canChange bool,
d *Decoder) (_ map[int64]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 24)
v = make(map[int64]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int64
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64UintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]uint)
- v, changed := fastpathTV.DecMapInt64UintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64UintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]uint)
+ if v, changed := fastpathTV.DecMapInt64UintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]uint)
- fastpathTV.DecMapInt64UintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64UintV(rv2i(rv).(map[int64]uint), false, d)
}
-func (f fastpathT) DecMapInt64UintX(vp *map[int64]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64UintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64UintX(vp *map[int64]uint, d *Decoder) {
+ if v, changed := f.DecMapInt64UintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64UintV(v map[int64]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64UintV(v map[int64]uint, canChange bool,
d *Decoder) (_ map[int64]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[int64]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int64
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64Uint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]uint8)
- v, changed := fastpathTV.DecMapInt64Uint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64Uint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]uint8)
+ if v, changed := fastpathTV.DecMapInt64Uint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]uint8)
- fastpathTV.DecMapInt64Uint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64Uint8V(rv2i(rv).(map[int64]uint8), false, d)
}
-func (f fastpathT) DecMapInt64Uint8X(vp *map[int64]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64Uint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64Uint8X(vp *map[int64]uint8, d *Decoder) {
+ if v, changed := f.DecMapInt64Uint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64Uint8V(v map[int64]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64Uint8V(v map[int64]uint8, canChange bool,
d *Decoder) (_ map[int64]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[int64]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int64
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64Uint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]uint16)
- v, changed := fastpathTV.DecMapInt64Uint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64Uint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]uint16)
+ if v, changed := fastpathTV.DecMapInt64Uint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]uint16)
- fastpathTV.DecMapInt64Uint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64Uint16V(rv2i(rv).(map[int64]uint16), false, d)
}
-func (f fastpathT) DecMapInt64Uint16X(vp *map[int64]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64Uint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64Uint16X(vp *map[int64]uint16, d *Decoder) {
+ if v, changed := f.DecMapInt64Uint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64Uint16V(v map[int64]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64Uint16V(v map[int64]uint16, canChange bool,
d *Decoder) (_ map[int64]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[int64]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int64
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64Uint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]uint32)
- v, changed := fastpathTV.DecMapInt64Uint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64Uint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]uint32)
+ if v, changed := fastpathTV.DecMapInt64Uint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]uint32)
- fastpathTV.DecMapInt64Uint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64Uint32V(rv2i(rv).(map[int64]uint32), false, d)
}
-func (f fastpathT) DecMapInt64Uint32X(vp *map[int64]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64Uint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64Uint32X(vp *map[int64]uint32, d *Decoder) {
+ if v, changed := f.DecMapInt64Uint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64Uint32V(v map[int64]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64Uint32V(v map[int64]uint32, canChange bool,
d *Decoder) (_ map[int64]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[int64]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int64
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64Uint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]uint64)
- v, changed := fastpathTV.DecMapInt64Uint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64Uint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]uint64)
+ if v, changed := fastpathTV.DecMapInt64Uint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]uint64)
- fastpathTV.DecMapInt64Uint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64Uint64V(rv2i(rv).(map[int64]uint64), false, d)
}
-func (f fastpathT) DecMapInt64Uint64X(vp *map[int64]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64Uint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64Uint64X(vp *map[int64]uint64, d *Decoder) {
+ if v, changed := f.DecMapInt64Uint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64Uint64V(v map[int64]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64Uint64V(v map[int64]uint64, canChange bool,
d *Decoder) (_ map[int64]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[int64]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int64
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64UintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]uintptr)
- v, changed := fastpathTV.DecMapInt64UintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64UintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]uintptr)
+ if v, changed := fastpathTV.DecMapInt64UintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]uintptr)
- fastpathTV.DecMapInt64UintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64UintptrV(rv2i(rv).(map[int64]uintptr), false, d)
}
-func (f fastpathT) DecMapInt64UintptrX(vp *map[int64]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64UintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64UintptrX(vp *map[int64]uintptr, d *Decoder) {
+ if v, changed := f.DecMapInt64UintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64UintptrV(v map[int64]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64UintptrV(v map[int64]uintptr, canChange bool,
d *Decoder) (_ map[int64]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[int64]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int64
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64IntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]int)
- v, changed := fastpathTV.DecMapInt64IntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64IntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]int)
+ if v, changed := fastpathTV.DecMapInt64IntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]int)
- fastpathTV.DecMapInt64IntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64IntV(rv2i(rv).(map[int64]int), false, d)
}
-func (f fastpathT) DecMapInt64IntX(vp *map[int64]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64IntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64IntX(vp *map[int64]int, d *Decoder) {
+ if v, changed := f.DecMapInt64IntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64IntV(v map[int64]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64IntV(v map[int64]int, canChange bool,
d *Decoder) (_ map[int64]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[int64]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int64
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64Int8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]int8)
- v, changed := fastpathTV.DecMapInt64Int8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64Int8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]int8)
+ if v, changed := fastpathTV.DecMapInt64Int8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]int8)
- fastpathTV.DecMapInt64Int8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64Int8V(rv2i(rv).(map[int64]int8), false, d)
}
-func (f fastpathT) DecMapInt64Int8X(vp *map[int64]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64Int8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64Int8X(vp *map[int64]int8, d *Decoder) {
+ if v, changed := f.DecMapInt64Int8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64Int8V(v map[int64]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64Int8V(v map[int64]int8, canChange bool,
d *Decoder) (_ map[int64]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[int64]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int64
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64Int16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]int16)
- v, changed := fastpathTV.DecMapInt64Int16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64Int16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]int16)
+ if v, changed := fastpathTV.DecMapInt64Int16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]int16)
- fastpathTV.DecMapInt64Int16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64Int16V(rv2i(rv).(map[int64]int16), false, d)
}
-func (f fastpathT) DecMapInt64Int16X(vp *map[int64]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64Int16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64Int16X(vp *map[int64]int16, d *Decoder) {
+ if v, changed := f.DecMapInt64Int16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64Int16V(v map[int64]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64Int16V(v map[int64]int16, canChange bool,
d *Decoder) (_ map[int64]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 10)
v = make(map[int64]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int64
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64Int32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]int32)
- v, changed := fastpathTV.DecMapInt64Int32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64Int32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]int32)
+ if v, changed := fastpathTV.DecMapInt64Int32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]int32)
- fastpathTV.DecMapInt64Int32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64Int32V(rv2i(rv).(map[int64]int32), false, d)
}
-func (f fastpathT) DecMapInt64Int32X(vp *map[int64]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64Int32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64Int32X(vp *map[int64]int32, d *Decoder) {
+ if v, changed := f.DecMapInt64Int32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64Int32V(v map[int64]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64Int32V(v map[int64]int32, canChange bool,
d *Decoder) (_ map[int64]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[int64]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int64
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64Int64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]int64)
- v, changed := fastpathTV.DecMapInt64Int64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64Int64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]int64)
+ if v, changed := fastpathTV.DecMapInt64Int64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]int64)
- fastpathTV.DecMapInt64Int64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64Int64V(rv2i(rv).(map[int64]int64), false, d)
}
-func (f fastpathT) DecMapInt64Int64X(vp *map[int64]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64Int64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64Int64X(vp *map[int64]int64, d *Decoder) {
+ if v, changed := f.DecMapInt64Int64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64Int64V(v map[int64]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64Int64V(v map[int64]int64, canChange bool,
d *Decoder) (_ map[int64]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[int64]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int64
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64Float32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]float32)
- v, changed := fastpathTV.DecMapInt64Float32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64Float32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]float32)
+ if v, changed := fastpathTV.DecMapInt64Float32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]float32)
- fastpathTV.DecMapInt64Float32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64Float32V(rv2i(rv).(map[int64]float32), false, d)
}
-func (f fastpathT) DecMapInt64Float32X(vp *map[int64]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64Float32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64Float32X(vp *map[int64]float32, d *Decoder) {
+ if v, changed := f.DecMapInt64Float32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64Float32V(v map[int64]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64Float32V(v map[int64]float32, canChange bool,
d *Decoder) (_ map[int64]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 12)
v = make(map[int64]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int64
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64Float64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]float64)
- v, changed := fastpathTV.DecMapInt64Float64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64Float64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]float64)
+ if v, changed := fastpathTV.DecMapInt64Float64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]float64)
- fastpathTV.DecMapInt64Float64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64Float64V(rv2i(rv).(map[int64]float64), false, d)
}
-func (f fastpathT) DecMapInt64Float64X(vp *map[int64]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64Float64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64Float64X(vp *map[int64]float64, d *Decoder) {
+ if v, changed := f.DecMapInt64Float64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64Float64V(v map[int64]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64Float64V(v map[int64]float64, canChange bool,
d *Decoder) (_ map[int64]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 16)
v = make(map[int64]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int64
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapInt64BoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[int64]bool)
- v, changed := fastpathTV.DecMapInt64BoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapInt64BoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[int64]bool)
+ if v, changed := fastpathTV.DecMapInt64BoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[int64]bool)
- fastpathTV.DecMapInt64BoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapInt64BoolV(rv2i(rv).(map[int64]bool), false, d)
}
-func (f fastpathT) DecMapInt64BoolX(vp *map[int64]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapInt64BoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapInt64BoolX(vp *map[int64]bool, d *Decoder) {
+ if v, changed := f.DecMapInt64BoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapInt64BoolV(v map[int64]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapInt64BoolV(v map[int64]bool, canChange bool,
d *Decoder) (_ map[int64]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[int64]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk int64
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeInt(64)
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeInt(64)
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolIntfR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]interface{})
- v, changed := fastpathTV.DecMapBoolIntfV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolIntfR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]interface{})
+ if v, changed := fastpathTV.DecMapBoolIntfV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]interface{})
- fastpathTV.DecMapBoolIntfV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolIntfV(rv2i(rv).(map[bool]interface{}), false, d)
}
-func (f fastpathT) DecMapBoolIntfX(vp *map[bool]interface{}, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolIntfV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolIntfX(vp *map[bool]interface{}, d *Decoder) {
+ if v, changed := f.DecMapBoolIntfV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolIntfV(v map[bool]interface{}, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolIntfV(v map[bool]interface{}, canChange bool,
d *Decoder) (_ map[bool]interface{}, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 17)
v = make(map[bool]interface{}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
mapGet := !d.h.MapValueReset && !d.h.InterfaceReset
var mk bool
var mv interface{}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
} else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
+ v[mk] = nil
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- if mapGet {
- mv = v[mk]
- } else {
- mv = nil
- }
- d.decode(&mv)
- if v != nil {
- v[mk] = mv
- }
+ if mapGet {
+ mv = v[mk]
+ } else {
+ mv = nil
+ }
+ d.decode(&mv)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolStringR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]string)
- v, changed := fastpathTV.DecMapBoolStringV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolStringR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]string)
+ if v, changed := fastpathTV.DecMapBoolStringV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]string)
- fastpathTV.DecMapBoolStringV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolStringV(rv2i(rv).(map[bool]string), false, d)
}
-func (f fastpathT) DecMapBoolStringX(vp *map[bool]string, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolStringV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolStringX(vp *map[bool]string, d *Decoder) {
+ if v, changed := f.DecMapBoolStringV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolStringV(v map[bool]string, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolStringV(v map[bool]string, canChange bool,
d *Decoder) (_ map[bool]string, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 17)
v = make(map[bool]string, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk bool
var mv string
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = ""
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeString()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeString()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolUintR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]uint)
- v, changed := fastpathTV.DecMapBoolUintV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolUintR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]uint)
+ if v, changed := fastpathTV.DecMapBoolUintV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]uint)
- fastpathTV.DecMapBoolUintV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolUintV(rv2i(rv).(map[bool]uint), false, d)
}
-func (f fastpathT) DecMapBoolUintX(vp *map[bool]uint, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolUintV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolUintX(vp *map[bool]uint, d *Decoder) {
+ if v, changed := f.DecMapBoolUintV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolUintV(v map[bool]uint, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolUintV(v map[bool]uint, canChange bool,
d *Decoder) (_ map[bool]uint, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[bool]uint, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk bool
var mv uint
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolUint8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]uint8)
- v, changed := fastpathTV.DecMapBoolUint8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolUint8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]uint8)
+ if v, changed := fastpathTV.DecMapBoolUint8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]uint8)
- fastpathTV.DecMapBoolUint8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolUint8V(rv2i(rv).(map[bool]uint8), false, d)
}
-func (f fastpathT) DecMapBoolUint8X(vp *map[bool]uint8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolUint8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolUint8X(vp *map[bool]uint8, d *Decoder) {
+ if v, changed := f.DecMapBoolUint8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolUint8V(v map[bool]uint8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolUint8V(v map[bool]uint8, canChange bool,
d *Decoder) (_ map[bool]uint8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 2)
v = make(map[bool]uint8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk bool
var mv uint8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint8(dd.DecodeUint(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint8(dd.DecodeUint(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolUint16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]uint16)
- v, changed := fastpathTV.DecMapBoolUint16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolUint16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]uint16)
+ if v, changed := fastpathTV.DecMapBoolUint16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]uint16)
- fastpathTV.DecMapBoolUint16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolUint16V(rv2i(rv).(map[bool]uint16), false, d)
}
-func (f fastpathT) DecMapBoolUint16X(vp *map[bool]uint16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolUint16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolUint16X(vp *map[bool]uint16, d *Decoder) {
+ if v, changed := f.DecMapBoolUint16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolUint16V(v map[bool]uint16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolUint16V(v map[bool]uint16, canChange bool,
d *Decoder) (_ map[bool]uint16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 3)
v = make(map[bool]uint16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk bool
var mv uint16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint16(dd.DecodeUint(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint16(dd.DecodeUint(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolUint32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]uint32)
- v, changed := fastpathTV.DecMapBoolUint32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolUint32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]uint32)
+ if v, changed := fastpathTV.DecMapBoolUint32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]uint32)
- fastpathTV.DecMapBoolUint32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolUint32V(rv2i(rv).(map[bool]uint32), false, d)
}
-func (f fastpathT) DecMapBoolUint32X(vp *map[bool]uint32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolUint32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolUint32X(vp *map[bool]uint32, d *Decoder) {
+ if v, changed := f.DecMapBoolUint32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolUint32V(v map[bool]uint32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolUint32V(v map[bool]uint32, canChange bool,
d *Decoder) (_ map[bool]uint32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[bool]uint32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk bool
var mv uint32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uint32(dd.DecodeUint(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = uint32(dd.DecodeUint(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolUint64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]uint64)
- v, changed := fastpathTV.DecMapBoolUint64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolUint64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]uint64)
+ if v, changed := fastpathTV.DecMapBoolUint64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]uint64)
- fastpathTV.DecMapBoolUint64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolUint64V(rv2i(rv).(map[bool]uint64), false, d)
}
-func (f fastpathT) DecMapBoolUint64X(vp *map[bool]uint64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolUint64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolUint64X(vp *map[bool]uint64, d *Decoder) {
+ if v, changed := f.DecMapBoolUint64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolUint64V(v map[bool]uint64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolUint64V(v map[bool]uint64, canChange bool,
d *Decoder) (_ map[bool]uint64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[bool]uint64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk bool
var mv uint64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeUint(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeUint(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolUintptrR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]uintptr)
- v, changed := fastpathTV.DecMapBoolUintptrV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolUintptrR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]uintptr)
+ if v, changed := fastpathTV.DecMapBoolUintptrV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]uintptr)
- fastpathTV.DecMapBoolUintptrV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolUintptrV(rv2i(rv).(map[bool]uintptr), false, d)
}
-func (f fastpathT) DecMapBoolUintptrX(vp *map[bool]uintptr, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolUintptrV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolUintptrX(vp *map[bool]uintptr, d *Decoder) {
+ if v, changed := f.DecMapBoolUintptrV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolUintptrV(v map[bool]uintptr, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolUintptrV(v map[bool]uintptr, canChange bool,
d *Decoder) (_ map[bool]uintptr, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[bool]uintptr, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk bool
var mv uintptr
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = uintptr(dd.DecodeUint(uintBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = uintptr(dd.DecodeUint(uintBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolIntR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]int)
- v, changed := fastpathTV.DecMapBoolIntV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolIntR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]int)
+ if v, changed := fastpathTV.DecMapBoolIntV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]int)
- fastpathTV.DecMapBoolIntV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolIntV(rv2i(rv).(map[bool]int), false, d)
}
-func (f fastpathT) DecMapBoolIntX(vp *map[bool]int, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolIntV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolIntX(vp *map[bool]int, d *Decoder) {
+ if v, changed := f.DecMapBoolIntV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolIntV(v map[bool]int, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolIntV(v map[bool]int, canChange bool,
d *Decoder) (_ map[bool]int, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[bool]int, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk bool
var mv int
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int(dd.DecodeInt(intBitsize))
- if v != nil {
- v[mk] = mv
- }
+ mv = int(dd.DecodeInt(intBitsize))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolInt8R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]int8)
- v, changed := fastpathTV.DecMapBoolInt8V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolInt8R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]int8)
+ if v, changed := fastpathTV.DecMapBoolInt8V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]int8)
- fastpathTV.DecMapBoolInt8V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolInt8V(rv2i(rv).(map[bool]int8), false, d)
}
-func (f fastpathT) DecMapBoolInt8X(vp *map[bool]int8, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolInt8V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolInt8X(vp *map[bool]int8, d *Decoder) {
+ if v, changed := f.DecMapBoolInt8V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolInt8V(v map[bool]int8, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolInt8V(v map[bool]int8, canChange bool,
d *Decoder) (_ map[bool]int8, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 2)
v = make(map[bool]int8, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk bool
var mv int8
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int8(dd.DecodeInt(8))
- if v != nil {
- v[mk] = mv
- }
+ mv = int8(dd.DecodeInt(8))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolInt16R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]int16)
- v, changed := fastpathTV.DecMapBoolInt16V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolInt16R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]int16)
+ if v, changed := fastpathTV.DecMapBoolInt16V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]int16)
- fastpathTV.DecMapBoolInt16V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolInt16V(rv2i(rv).(map[bool]int16), false, d)
}
-func (f fastpathT) DecMapBoolInt16X(vp *map[bool]int16, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolInt16V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolInt16X(vp *map[bool]int16, d *Decoder) {
+ if v, changed := f.DecMapBoolInt16V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolInt16V(v map[bool]int16, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolInt16V(v map[bool]int16, canChange bool,
d *Decoder) (_ map[bool]int16, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 3)
v = make(map[bool]int16, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk bool
var mv int16
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int16(dd.DecodeInt(16))
- if v != nil {
- v[mk] = mv
- }
+ mv = int16(dd.DecodeInt(16))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolInt32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]int32)
- v, changed := fastpathTV.DecMapBoolInt32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolInt32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]int32)
+ if v, changed := fastpathTV.DecMapBoolInt32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]int32)
- fastpathTV.DecMapBoolInt32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolInt32V(rv2i(rv).(map[bool]int32), false, d)
}
-func (f fastpathT) DecMapBoolInt32X(vp *map[bool]int32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolInt32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolInt32X(vp *map[bool]int32, d *Decoder) {
+ if v, changed := f.DecMapBoolInt32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolInt32V(v map[bool]int32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolInt32V(v map[bool]int32, canChange bool,
d *Decoder) (_ map[bool]int32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[bool]int32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk bool
var mv int32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = int32(dd.DecodeInt(32))
- if v != nil {
- v[mk] = mv
- }
+ mv = int32(dd.DecodeInt(32))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolInt64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]int64)
- v, changed := fastpathTV.DecMapBoolInt64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolInt64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]int64)
+ if v, changed := fastpathTV.DecMapBoolInt64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]int64)
- fastpathTV.DecMapBoolInt64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolInt64V(rv2i(rv).(map[bool]int64), false, d)
}
-func (f fastpathT) DecMapBoolInt64X(vp *map[bool]int64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolInt64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolInt64X(vp *map[bool]int64, d *Decoder) {
+ if v, changed := f.DecMapBoolInt64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolInt64V(v map[bool]int64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolInt64V(v map[bool]int64, canChange bool,
d *Decoder) (_ map[bool]int64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[bool]int64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk bool
var mv int64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeInt(64)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeInt(64)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolFloat32R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]float32)
- v, changed := fastpathTV.DecMapBoolFloat32V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolFloat32R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]float32)
+ if v, changed := fastpathTV.DecMapBoolFloat32V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]float32)
- fastpathTV.DecMapBoolFloat32V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolFloat32V(rv2i(rv).(map[bool]float32), false, d)
}
-func (f fastpathT) DecMapBoolFloat32X(vp *map[bool]float32, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolFloat32V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolFloat32X(vp *map[bool]float32, d *Decoder) {
+ if v, changed := f.DecMapBoolFloat32V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolFloat32V(v map[bool]float32, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolFloat32V(v map[bool]float32, canChange bool,
d *Decoder) (_ map[bool]float32, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 5)
v = make(map[bool]float32, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk bool
var mv float32
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = float32(dd.DecodeFloat(true))
- if v != nil {
- v[mk] = mv
- }
+ mv = float32(dd.DecodeFloat(true))
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolFloat64R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]float64)
- v, changed := fastpathTV.DecMapBoolFloat64V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolFloat64R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]float64)
+ if v, changed := fastpathTV.DecMapBoolFloat64V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]float64)
- fastpathTV.DecMapBoolFloat64V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolFloat64V(rv2i(rv).(map[bool]float64), false, d)
}
-func (f fastpathT) DecMapBoolFloat64X(vp *map[bool]float64, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolFloat64V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolFloat64X(vp *map[bool]float64, d *Decoder) {
+ if v, changed := f.DecMapBoolFloat64V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolFloat64V(v map[bool]float64, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolFloat64V(v map[bool]float64, canChange bool,
d *Decoder) (_ map[bool]float64, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 9)
v = make(map[bool]float64, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk bool
var mv float64
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = 0
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeFloat(false)
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeFloat(false)
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
-func (f *decFnInfo) fastpathDecMapBoolBoolR(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[bool]bool)
- v, changed := fastpathTV.DecMapBoolBoolV(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) fastpathDecMapBoolBoolR(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[bool]bool)
+ if v, changed := fastpathTV.DecMapBoolBoolV(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[bool]bool)
- fastpathTV.DecMapBoolBoolV(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.DecMapBoolBoolV(rv2i(rv).(map[bool]bool), false, d)
}
-func (f fastpathT) DecMapBoolBoolX(vp *map[bool]bool, checkNil bool, d *Decoder) {
- v, changed := f.DecMapBoolBoolV(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) DecMapBoolBoolX(vp *map[bool]bool, d *Decoder) {
+ if v, changed := f.DecMapBoolBoolV(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) DecMapBoolBoolV(v map[bool]bool, checkNil bool, canChange bool,
+func (_ fastpathT) DecMapBoolBoolV(v map[bool]bool, canChange bool,
d *Decoder) (_ map[bool]bool, changed bool) {
- dd := d.d
- cr := d.cr
-
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
+ dd, esep := d.d, d.hh.hasElemSeparators()
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, 2)
v = make(map[bool]bool, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
var mk bool
var mv bool
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep {
+ dd.ReadMapElemKey()
+ }
+ mk = dd.DecodeBool()
+ if esep {
+ dd.ReadMapElemValue()
+ }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue {
+ delete(v, mk)
+ } else {
+ v[mk] = false
}
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil {
- cr.sendContainerState(containerMapKey)
- }
- mk = dd.DecodeBool()
- if cr != nil {
- cr.sendContainerState(containerMapValue)
- }
- mv = dd.DecodeBool()
- if v != nil {
- v[mk] = mv
- }
+ mv = dd.DecodeBool()
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil {
- cr.sendContainerState(containerMapEnd)
- }
+ dd.ReadMapEnd()
return v, changed
}
diff --git a/codec/fast-path.go.tmpl b/codec/fast-path.go.tmpl
index 3f43dc6..eebc31b 100644
--- a/codec/fast-path.go.tmpl
+++ b/codec/fast-path.go.tmpl
@@ -23,7 +23,7 @@ package codec
// Currently support
// - slice of all builtin types,
// - map of all builtin types to string or interface value
-// - symetrical maps of all builtin types (e.g. str-str, uint8-uint8)
+// - symmetrical maps of all builtin types (e.g. str-str, uint8-uint8)
// This should provide adequate "typical" implementations.
//
// Note that fast track decode functions must handle values for which an address cannot be obtained.
@@ -38,8 +38,7 @@ import (
"sort"
)
-const fastpathCheckNilFalse = false // for reflect
-const fastpathCheckNilTrue = true // for type switch
+const fastpathEnabled = true
type fastpathT struct {}
@@ -48,8 +47,8 @@ var fastpathTV fastpathT
type fastpathE struct {
rtid uintptr
rt reflect.Type
- encfn func(*encFnInfo, reflect.Value)
- decfn func(*decFnInfo, reflect.Value)
+ encfn func(*Encoder, *codecFnInfo, reflect.Value)
+ decfn func(*Decoder, *codecFnInfo, reflect.Value)
}
type fastpathA [{{ .FastpathLen }}]fastpathE
@@ -81,23 +80,26 @@ var fastpathAV fastpathA
// due to possible initialization loop error, make fastpath in an init()
func init() {
- if !fastpathEnabled {
- return
- }
i := 0
- fn := func(v interface{}, fe func(*encFnInfo, reflect.Value), fd func(*decFnInfo, reflect.Value)) (f fastpathE) {
+ fn := func(v interface{},
+ fe func(*Encoder, *codecFnInfo, reflect.Value),
+ fd func(*Decoder, *codecFnInfo, reflect.Value)) (f fastpathE) {
xrt := reflect.TypeOf(v)
- xptr := reflect.ValueOf(xrt).Pointer()
+ xptr := rt2id(xrt)
+ if useLookupRecognizedTypes {
+ recognizedRtids = append(recognizedRtids, xptr)
+ recognizedRtidPtrs = append(recognizedRtidPtrs, rt2id(reflect.PtrTo(xrt)))
+ }
fastpathAV[i] = fastpathE{xptr, xrt, fe, fd}
i++
return
}
{{range .Values}}{{if not .Primitive}}{{if not .MapKey }}
- fn([]{{ .Elem }}(nil), (*encFnInfo).{{ .MethodNamePfx "fastpathEnc" false }}R, (*decFnInfo).{{ .MethodNamePfx "fastpathDec" false }}R){{end}}{{end}}{{end}}
+ fn([]{{ .Elem }}(nil), (*Encoder).{{ .MethodNamePfx "fastpathEnc" false }}R, (*Decoder).{{ .MethodNamePfx "fastpathDec" false }}R){{end}}{{end}}{{end}}
{{range .Values}}{{if not .Primitive}}{{if .MapKey }}
- fn(map[{{ .MapKey }}]{{ .Elem }}(nil), (*encFnInfo).{{ .MethodNamePfx "fastpathEnc" false }}R, (*decFnInfo).{{ .MethodNamePfx "fastpathDec" false }}R){{end}}{{end}}{{end}}
+ fn(map[{{ .MapKey }}]{{ .Elem }}(nil), (*Encoder).{{ .MethodNamePfx "fastpathEnc" false }}R, (*Decoder).{{ .MethodNamePfx "fastpathDec" false }}R){{end}}{{end}}{{end}}
sort.Sort(fastpathAslice(fastpathAV[:]))
}
@@ -106,17 +108,14 @@ func init() {
// -- -- fast path type switch
func fastpathEncodeTypeSwitch(iv interface{}, e *Encoder) bool {
- if !fastpathEnabled {
- return false
- }
switch v := iv.(type) {
{{range .Values}}{{if not .Primitive}}{{if not .MapKey }}
case []{{ .Elem }}:{{else}}
case map[{{ .MapKey }}]{{ .Elem }}:{{end}}
- fastpathTV.{{ .MethodNamePfx "Enc" false }}V(v, fastpathCheckNilTrue, e){{if not .MapKey }}
+ fastpathTV.{{ .MethodNamePfx "Enc" false }}V(v, e){{if not .MapKey }}
case *[]{{ .Elem }}:{{else}}
case *map[{{ .MapKey }}]{{ .Elem }}:{{end}}
- fastpathTV.{{ .MethodNamePfx "Enc" false }}V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.{{ .MethodNamePfx "Enc" false }}V(*v, e)
{{end}}{{end}}
default:
_ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release)
@@ -126,15 +125,12 @@ func fastpathEncodeTypeSwitch(iv interface{}, e *Encoder) bool {
}
func fastpathEncodeTypeSwitchSlice(iv interface{}, e *Encoder) bool {
- if !fastpathEnabled {
- return false
- }
switch v := iv.(type) {
{{range .Values}}{{if not .Primitive}}{{if not .MapKey }}
case []{{ .Elem }}:
- fastpathTV.{{ .MethodNamePfx "Enc" false }}V(v, fastpathCheckNilTrue, e)
+ fastpathTV.{{ .MethodNamePfx "Enc" false }}V(v, e)
case *[]{{ .Elem }}:
- fastpathTV.{{ .MethodNamePfx "Enc" false }}V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.{{ .MethodNamePfx "Enc" false }}V(*v, e)
{{end}}{{end}}{{end}}
default:
_ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release)
@@ -144,15 +140,12 @@ func fastpathEncodeTypeSwitchSlice(iv interface{}, e *Encoder) bool {
}
func fastpathEncodeTypeSwitchMap(iv interface{}, e *Encoder) bool {
- if !fastpathEnabled {
- return false
- }
switch v := iv.(type) {
{{range .Values}}{{if not .Primitive}}{{if .MapKey }}
case map[{{ .MapKey }}]{{ .Elem }}:
- fastpathTV.{{ .MethodNamePfx "Enc" false }}V(v, fastpathCheckNilTrue, e)
+ fastpathTV.{{ .MethodNamePfx "Enc" false }}V(v, e)
case *map[{{ .MapKey }}]{{ .Elem }}:
- fastpathTV.{{ .MethodNamePfx "Enc" false }}V(*v, fastpathCheckNilTrue, e)
+ fastpathTV.{{ .MethodNamePfx "Enc" false }}V(*v, e)
{{end}}{{end}}{{end}}
default:
_ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release)
@@ -164,39 +157,53 @@ func fastpathEncodeTypeSwitchMap(iv interface{}, e *Encoder) bool {
// -- -- fast path functions
{{range .Values}}{{if not .Primitive}}{{if not .MapKey }}
-func (f *encFnInfo) {{ .MethodNamePfx "fastpathEnc" false }}R(rv reflect.Value) {
- fastpathTV.{{ .MethodNamePfx "Enc" false }}V(rv.Interface().([]{{ .Elem }}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) {{ .MethodNamePfx "fastpathEnc" false }}R(f *codecFnInfo, rv reflect.Value) {
+ if f.ti.mbs {
+ fastpathTV.{{ .MethodNamePfx "EncAsMap" false }}V(rv2i(rv).([]{{ .Elem }}), e)
+ } else {
+ fastpathTV.{{ .MethodNamePfx "Enc" false }}V(rv2i(rv).([]{{ .Elem }}), e)
+ }
+}
+func (_ fastpathT) {{ .MethodNamePfx "Enc" false }}V(v []{{ .Elem }}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteArrayStart(len(v))
+ for _, v2 := range v {
+ if esep { ee.WriteArrayElem() }
+ {{ encmd .Elem "v2"}}
+ }
+ ee.WriteArrayEnd()
}
-func (_ fastpathT) {{ .MethodNamePfx "Enc" false }}V(v []{{ .Elem }}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
+
+func (_ fastpathT) {{ .MethodNamePfx "EncAsMap" false }}V(v []{{ .Elem }}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ if len(v)%2 == 1 {
+ e.errorf("mapBySlice requires even slice length, but got %v", len(v))
return
}
- ee.EncodeArrayStart(len(v))
- for _, v2 := range v {
- if cr != nil { cr.sendContainerState(containerArrayElem) }
+ ee.WriteMapStart(len(v) / 2)
+ for j, v2 := range v {
+ if esep {
+ if j%2 == 0 {
+ ee.WriteMapElemKey()
+ } else {
+ ee.WriteMapElemValue()
+ }
+ }
{{ encmd .Elem "v2"}}
}
- if cr != nil { cr.sendContainerState(containerArrayEnd) }{{/* ee.EncodeEnd() */}}
+ ee.WriteMapEnd()
}
{{end}}{{end}}{{end}}
{{range .Values}}{{if not .Primitive}}{{if .MapKey }}
-func (f *encFnInfo) {{ .MethodNamePfx "fastpathEnc" false }}R(rv reflect.Value) {
- fastpathTV.{{ .MethodNamePfx "Enc" false }}V(rv.Interface().(map[{{ .MapKey }}]{{ .Elem }}), fastpathCheckNilFalse, f.e)
+func (e *Encoder) {{ .MethodNamePfx "fastpathEnc" false }}R(f *codecFnInfo, rv reflect.Value) {
+ fastpathTV.{{ .MethodNamePfx "Enc" false }}V(rv2i(rv).(map[{{ .MapKey }}]{{ .Elem }}), e)
}
-func (_ fastpathT) {{ .MethodNamePfx "Enc" false }}V(v map[{{ .MapKey }}]{{ .Elem }}, checkNil bool, e *Encoder) {
- ee := e.e
- cr := e.cr
- if checkNil && v == nil {
- ee.EncodeNil()
- return
- }
- ee.EncodeMapStart(len(v))
+func (_ fastpathT) {{ .MethodNamePfx "Enc" false }}V(v map[{{ .MapKey }}]{{ .Elem }}, e *Encoder) {
+ ee, esep := e.e, e.hh.hasElemSeparators()
+ ee.WriteMapStart(len(v))
{{if eq .MapKey "string"}}asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0
{{end}}if e.h.Canonical {
{{if eq .MapKey "interface{}"}}{{/* out of band
@@ -215,9 +222,9 @@ func (_ fastpathT) {{ .MethodNamePfx "Enc" false }}V(v map[{{ .MapKey }}]{{ .Ele
}
sort.Sort(bytesISlice(v2))
for j := range v2 {
- if cr != nil { cr.sendContainerState(containerMapKey) }
+ if esep { ee.WriteMapElemKey() }
e.asis(v2[j].v)
- if cr != nil { cr.sendContainerState(containerMapValue) }
+ if esep { ee.WriteMapElemValue() }
e.encode(v[v2[j].i])
} {{else}}{{ $x := sorttype .MapKey true}}v2 := make([]{{ $x }}, len(v))
var i int
@@ -227,28 +234,28 @@ func (_ fastpathT) {{ .MethodNamePfx "Enc" false }}V(v map[{{ .MapKey }}]{{ .Ele
}
sort.Sort({{ sorttype .MapKey false}}(v2))
for _, k2 := range v2 {
- if cr != nil { cr.sendContainerState(containerMapKey) }
+ if esep { ee.WriteMapElemKey() }
{{if eq .MapKey "string"}}if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}{{else}}{{ $y := printf "%s(k2)" .MapKey }}{{ encmd .MapKey $y }}{{end}}
- if cr != nil { cr.sendContainerState(containerMapValue) }
+ if esep { ee.WriteMapElemValue() }
{{ $y := printf "v[%s(k2)]" .MapKey }}{{ encmd .Elem $y }}
} {{end}}
} else {
for k2, v2 := range v {
- if cr != nil { cr.sendContainerState(containerMapKey) }
+ if esep { ee.WriteMapElemKey() }
{{if eq .MapKey "string"}}if asSymbols {
ee.EncodeSymbol(k2)
} else {
ee.EncodeString(c_UTF8, k2)
}{{else}}{{ encmd .MapKey "k2"}}{{end}}
- if cr != nil { cr.sendContainerState(containerMapValue) }
+ if esep { ee.WriteMapElemValue() }
{{ encmd .Elem "v2"}}
}
}
- if cr != nil { cr.sendContainerState(containerMapEnd) }{{/* ee.EncodeEnd() */}}
+ ee.WriteMapEnd()
}
{{end}}{{end}}{{end}}
@@ -257,18 +264,14 @@ func (_ fastpathT) {{ .MethodNamePfx "Enc" false }}V(v map[{{ .MapKey }}]{{ .Ele
// -- -- fast path type switch
func fastpathDecodeTypeSwitch(iv interface{}, d *Decoder) bool {
- if !fastpathEnabled {
- return false
- }
switch v := iv.(type) {
{{range .Values}}{{if not .Primitive}}{{if not .MapKey }}
case []{{ .Elem }}:{{else}}
case map[{{ .MapKey }}]{{ .Elem }}:{{end}}
- fastpathTV.{{ .MethodNamePfx "Dec" false }}V(v, fastpathCheckNilFalse, false, d){{if not .MapKey }}
- case *[]{{ .Elem }}:{{else}}
- case *map[{{ .MapKey }}]{{ .Elem }}:{{end}}
- v2, changed2 := fastpathTV.{{ .MethodNamePfx "Dec" false }}V(*v, fastpathCheckNilFalse, true, d)
- if changed2 {
+ fastpathTV.{{ .MethodNamePfx "Dec" false }}V(v, false, d){{if not .MapKey }}
+ case *[]{{ .Elem }}: {{else}}
+ case *map[{{ .MapKey }}]{{ .Elem }}: {{end}}
+ if v2, changed2 := fastpathTV.{{ .MethodNamePfx "Dec" false }}V(*v, true, d); changed2 {
*v = v2
}
{{end}}{{end}}
@@ -279,6 +282,20 @@ func fastpathDecodeTypeSwitch(iv interface{}, d *Decoder) bool {
return true
}
+func fastpathDecodeSetZeroTypeSwitch(iv interface{}, d *Decoder) bool {
+ switch v := iv.(type) {
+{{range .Values}}{{if not .Primitive}}{{if not .MapKey }}
+ case *[]{{ .Elem }}: {{else}}
+ case *map[{{ .MapKey }}]{{ .Elem }}: {{end}}
+ *v = nil
+{{end}}{{end}}
+ default:
+ _ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release)
+ return false
+ }
+ return true
+}
+
// -- -- fast path functions
{{range .Values}}{{if not .Primitive}}{{if not .MapKey }}
{{/*
@@ -287,40 +304,29 @@ Slices can change if they
- are addressable (from a ptr)
- are settable (e.g. contained in an interface{})
*/}}
-func (f *decFnInfo) {{ .MethodNamePfx "fastpathDec" false }}R(rv reflect.Value) {
- array := f.seq == seqTypeArray
- if !array && rv.CanAddr() { {{/* // CanSet => CanAddr + Exported */}}
- vp := rv.Addr().Interface().(*[]{{ .Elem }})
- v, changed := fastpathTV.{{ .MethodNamePfx "Dec" false }}V(*vp, fastpathCheckNilFalse, !array, f.d)
- if changed {
- *vp = v
+func (d *Decoder) {{ .MethodNamePfx "fastpathDec" false }}R(f *codecFnInfo, rv reflect.Value) {
+ if array := f.seq == seqTypeArray; !array && rv.Kind() == reflect.Ptr {
+ var vp = rv2i(rv).(*[]{{ .Elem }})
+ if v, changed := fastpathTV.{{ .MethodNamePfx "Dec" false }}V(*vp, !array, d); changed {
+ *vp = v
}
} else {
- v := rv.Interface().([]{{ .Elem }})
- fastpathTV.{{ .MethodNamePfx "Dec" false }}V(v, fastpathCheckNilFalse, false, f.d)
+ fastpathTV.{{ .MethodNamePfx "Dec" false }}V(rv2i(rv).([]{{ .Elem }}), !array, d)
}
}
-func (f fastpathT) {{ .MethodNamePfx "Dec" false }}X(vp *[]{{ .Elem }}, checkNil bool, d *Decoder) {
- v, changed := f.{{ .MethodNamePfx "Dec" false }}V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) {{ .MethodNamePfx "Dec" false }}X(vp *[]{{ .Elem }}, d *Decoder) {
+ if v, changed := f.{{ .MethodNamePfx "Dec" false }}V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) {{ .MethodNamePfx "Dec" false }}V(v []{{ .Elem }}, checkNil bool, canChange bool, d *Decoder) (_ []{{ .Elem }}, changed bool) {
+func (_ fastpathT) {{ .MethodNamePfx "Dec" false }}V(v []{{ .Elem }}, canChange bool, d *Decoder) (_ []{{ .Elem }}, changed bool) {
dd := d.d
{{/* // if dd.isContainerType(valueTypeNil) { dd.TryDecodeAsNil() */}}
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
slh, containerLenS := d.decSliceHelperStart()
if containerLenS == 0 {
if canChange {
- if v == nil {
+ if v == nil {
v = []{{ .Elem }}{}
} else if len(v) != 0 {
v = v[:0]
@@ -330,98 +336,62 @@ func (_ fastpathT) {{ .MethodNamePfx "Dec" false }}V(v []{{ .Elem }}, checkNil b
slh.End()
return v, changed
}
-
- if containerLenS > 0 {
- x2read := containerLenS
- var xtrunc bool
+
+ hasLen := containerLenS > 0
+ var xlen int
+ if hasLen && canChange {
if containerLenS > cap(v) {
- if canChange { {{/*
- // fast-path is for "basic" immutable types, so no need to copy them over
- // s := make([]{{ .Elem }}, decInferLen(containerLenS, d.h.MaxInitLen))
- // copy(s, v[:cap(v)])
- // v = s */}}
- var xlen int
- xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, {{ .Size }})
- if xtrunc {
- if xlen <= cap(v) {
- v = v[:xlen]
- } else {
- v = make([]{{ .Elem }}, xlen)
- }
- } else {
- v = make([]{{ .Elem }}, xlen)
- }
- changed = true
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, {{ .Size }})
+ if xlen <= cap(v) {
+ v = v[:xlen]
} else {
- d.arrayCannotExpand(len(v), containerLenS)
+ v = make([]{{ .Elem }}, xlen)
}
- x2read = len(v)
+ changed = true
} else if containerLenS != len(v) {
- if canChange {
- v = v[:containerLenS]
- changed = true
- }
- } {{/* // all checks done. cannot go past len. */}}
- j := 0
- for ; j < x2read; j++ {
- slh.ElemContainerState(j)
- {{ if eq .Elem "interface{}" }}d.decode(&v[j]){{ else }}v[j] = {{ decmd .Elem }}{{ end }}
+ v = v[:containerLenS]
+ changed = true
}
- if xtrunc { {{/* // means canChange=true, changed=true already. */}}
- for ; j < containerLenS; j++ {
- v = append(v, {{ zerocmd .Elem }})
- slh.ElemContainerState(j)
- {{ if eq .Elem "interface{}" }}d.decode(&v[j]){{ else }}v[j] = {{ decmd .Elem }}{{ end }}
- }
- } else if !canChange {
- for ; j < containerLenS; j++ {
- slh.ElemContainerState(j)
- d.swallow()
+ }
+ j := 0
+ for ; (hasLen && j < containerLenS) || !(hasLen || dd.CheckBreak()); j++ {
+ if j == 0 && len(v) == 0 {
+ if hasLen {
+ xlen = decInferLen(containerLenS, d.h.MaxInitLen, {{ .Size }})
+ } else {
+ xlen = 8
}
+ v = make([]{{ .Elem }}, xlen)
+ changed = true
}
- } else {
- breakFound := dd.CheckBreak() {{/* check break first, so we can initialize v with a capacity of 4 if necessary */}}
- if breakFound {
+ // if indefinite, etc, then expand the slice if necessary
+ var decodeIntoBlank bool
+ if j >= len(v) {
if canChange {
- if v == nil {
- v = []{{ .Elem }}{}
- } else if len(v) != 0 {
- v = v[:0]
- }
+ v = append(v, {{ zerocmd .Elem }})
changed = true
- }
- slh.End()
- return v, changed
- }
- if cap(v) == 0 {
- v = make([]{{ .Elem }}, 1, 4)
- changed = true
- }
- j := 0
- for ; !breakFound; j++ {
- if j >= len(v) {
- if canChange {
- v = append(v, {{ zerocmd .Elem }})
- changed = true
- } else {
- d.arrayCannotExpand(len(v), j+1)
- }
- }
- slh.ElemContainerState(j)
- if j < len(v) { {{/* // all checks done. cannot go past len. */}}
- {{ if eq .Elem "interface{}" }}d.decode(&v[j])
- {{ else }}v[j] = {{ decmd .Elem }}{{ end }}
} else {
- d.swallow()
+ d.arrayCannotExpand(len(v), j+1)
+ decodeIntoBlank = true
}
- breakFound = dd.CheckBreak()
}
- if canChange && j < len(v) {
+ slh.ElemContainerState(j)
+ if decodeIntoBlank {
+ d.swallow()
+ } else {
+ {{ if eq .Elem "interface{}" }}d.decode(&v[j]){{ else }}v[j] = {{ decmd .Elem }}{{ end }}
+ }
+ }
+ if canChange {
+ if j < len(v) {
v = v[:j]
changed = true
+ } else if j == 0 && v == nil {
+ v = make([]{{ .Elem }}, 0)
+ changed = true
}
}
- slh.End()
+ slh.End()
return v, changed
}
@@ -434,77 +404,58 @@ Maps can change if they are
- addressable (from a ptr)
- settable (e.g. contained in an interface{})
*/}}
-func (f *decFnInfo) {{ .MethodNamePfx "fastpathDec" false }}R(rv reflect.Value) {
- if rv.CanAddr() {
- vp := rv.Addr().Interface().(*map[{{ .MapKey }}]{{ .Elem }})
- v, changed := fastpathTV.{{ .MethodNamePfx "Dec" false }}V(*vp, fastpathCheckNilFalse, true, f.d)
- if changed {
+func (d *Decoder) {{ .MethodNamePfx "fastpathDec" false }}R(f *codecFnInfo, rv reflect.Value) {
+ if rv.Kind() == reflect.Ptr {
+ vp := rv2i(rv).(*map[{{ .MapKey }}]{{ .Elem }})
+ if v, changed := fastpathTV.{{ .MethodNamePfx "Dec" false }}V(*vp, true, d); changed {
*vp = v
}
- } else {
- v := rv.Interface().(map[{{ .MapKey }}]{{ .Elem }})
- fastpathTV.{{ .MethodNamePfx "Dec" false }}V(v, fastpathCheckNilFalse, false, f.d)
+ return
}
+ fastpathTV.{{ .MethodNamePfx "Dec" false }}V(rv2i(rv).(map[{{ .MapKey }}]{{ .Elem }}), false, d)
}
-func (f fastpathT) {{ .MethodNamePfx "Dec" false }}X(vp *map[{{ .MapKey }}]{{ .Elem }}, checkNil bool, d *Decoder) {
- v, changed := f.{{ .MethodNamePfx "Dec" false }}V(*vp, checkNil, true, d)
- if changed {
+func (f fastpathT) {{ .MethodNamePfx "Dec" false }}X(vp *map[{{ .MapKey }}]{{ .Elem }}, d *Decoder) {
+ if v, changed := f.{{ .MethodNamePfx "Dec" false }}V(*vp, true, d); changed {
*vp = v
}
}
-func (_ fastpathT) {{ .MethodNamePfx "Dec" false }}V(v map[{{ .MapKey }}]{{ .Elem }}, checkNil bool, canChange bool,
+func (_ fastpathT) {{ .MethodNamePfx "Dec" false }}V(v map[{{ .MapKey }}]{{ .Elem }}, canChange bool,
d *Decoder) (_ map[{{ .MapKey }}]{{ .Elem }}, changed bool) {
- dd := d.d
- cr := d.cr
+ dd, esep := d.d, d.hh.hasElemSeparators()
{{/* // if dd.isContainerType(valueTypeNil) {dd.TryDecodeAsNil() */}}
- if checkNil && dd.TryDecodeAsNil() {
- if v != nil {
- changed = true
- }
- return nil, changed
- }
-
containerLen := dd.ReadMapStart()
if canChange && v == nil {
- xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, {{ .Size }})
+ xlen := decInferLen(containerLen, d.h.MaxInitLen, {{ .Size }})
v = make(map[{{ .MapKey }}]{{ .Elem }}, xlen)
changed = true
}
+ if containerLen == 0 {
+ dd.ReadMapEnd()
+ return v, changed
+ }
{{ if eq .Elem "interface{}" }}mapGet := !d.h.MapValueReset && !d.h.InterfaceReset{{end}}
var mk {{ .MapKey }}
var mv {{ .Elem }}
- if containerLen > 0 {
- for j := 0; j < containerLen; j++ {
- if cr != nil { cr.sendContainerState(containerMapKey) }
- {{ if eq .MapKey "interface{}" }}mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv) {{/* // maps cannot have []byte as key. switch to string. */}}
- }{{ else }}mk = {{ decmd .MapKey }}{{ end }}
- if cr != nil { cr.sendContainerState(containerMapValue) }
- {{ if eq .Elem "interface{}" }}if mapGet { mv = v[mk] } else { mv = nil }
- d.decode(&mv){{ else }}mv = {{ decmd .Elem }}{{ end }}
- if v != nil {
- v[mk] = mv
- }
+ hasLen := containerLen > 0
+ for j := 0; (hasLen && j < containerLen) || !(hasLen || dd.CheckBreak()); j++ {
+ if esep { dd.ReadMapElemKey() }
+ {{ if eq .MapKey "interface{}" }}mk = nil
+ d.decode(&mk)
+ if bv, bok := mk.([]byte); bok {
+ mk = d.string(bv) {{/* // maps cannot have []byte as key. switch to string. */}}
+ }{{ else }}mk = {{ decmd .MapKey }}{{ end }}
+ if esep { dd.ReadMapElemValue() }
+ if dd.TryDecodeAsNil() {
+ if d.h.DeleteOnNilMapValue { delete(v, mk) } else { v[mk] = {{ zerocmd .Elem }} }
+ continue
}
- } else if containerLen < 0 {
- for j := 0; !dd.CheckBreak(); j++ {
- if cr != nil { cr.sendContainerState(containerMapKey) }
- {{ if eq .MapKey "interface{}" }}mk = nil
- d.decode(&mk)
- if bv, bok := mk.([]byte); bok {
- mk = d.string(bv) {{/* // maps cannot have []byte as key. switch to string. */}}
- }{{ else }}mk = {{ decmd .MapKey }}{{ end }}
- if cr != nil { cr.sendContainerState(containerMapValue) }
- {{ if eq .Elem "interface{}" }}if mapGet { mv = v[mk] } else { mv = nil }
- d.decode(&mv){{ else }}mv = {{ decmd .Elem }}{{ end }}
- if v != nil {
- v[mk] = mv
- }
+ {{ if eq .Elem "interface{}" }}if mapGet { mv = v[mk] } else { mv = nil }
+ d.decode(&mv){{ else }}mv = {{ decmd .Elem }}{{ end }}
+ if v != nil {
+ v[mk] = mv
}
}
- if cr != nil { cr.sendContainerState(containerMapEnd) }
+ dd.ReadMapEnd()
return v, changed
}
diff --git a/codec/fast-path.not.go b/codec/fast-path.not.go
index d6f5f0c..9573d64 100644
--- a/codec/fast-path.not.go
+++ b/codec/fast-path.not.go
@@ -4,6 +4,8 @@ package codec
import "reflect"
+const fastpathEnabled = false
+
// The generated fast-path code is very large, and adds a few seconds to the build time.
// This causes test execution, execution of small tools which use codec, etc
// to take a long time.
@@ -12,17 +14,18 @@ import "reflect"
// This tag disables fastpath during build, allowing for faster build, test execution,
// short-program runs, etc.
-func fastpathDecodeTypeSwitch(iv interface{}, d *Decoder) bool { return false }
-func fastpathEncodeTypeSwitch(iv interface{}, e *Encoder) bool { return false }
-func fastpathEncodeTypeSwitchSlice(iv interface{}, e *Encoder) bool { return false }
-func fastpathEncodeTypeSwitchMap(iv interface{}, e *Encoder) bool { return false }
+func fastpathDecodeTypeSwitch(iv interface{}, d *Decoder) bool { return false }
+func fastpathEncodeTypeSwitch(iv interface{}, e *Encoder) bool { return false }
+func fastpathEncodeTypeSwitchSlice(iv interface{}, e *Encoder) bool { return false }
+func fastpathEncodeTypeSwitchMap(iv interface{}, e *Encoder) bool { return false }
+func fastpathDecodeSetZeroTypeSwitch(iv interface{}, d *Decoder) bool { return false }
type fastpathT struct{}
type fastpathE struct {
rtid uintptr
rt reflect.Type
- encfn func(*encFnInfo, reflect.Value)
- decfn func(*decFnInfo, reflect.Value)
+ encfn func(*Encoder, *codecFnInfo, reflect.Value)
+ decfn func(*Decoder, *codecFnInfo, reflect.Value)
}
type fastpathA [0]fastpathE
diff --git a/codec/gen-dec-array.go.tmpl b/codec/gen-dec-array.go.tmpl
index 08476a4..d9940c0 100644
--- a/codec/gen-dec-array.go.tmpl
+++ b/codec/gen-dec-array.go.tmpl
@@ -13,91 +13,65 @@ if {{var "l"}} == 0 {
{{var "v"}} = make({{ .CTyp }}, 0)
{{var "c"}} = true
} {{end}}
-} else if {{var "l"}} > 0 {
- {{if isChan }}if {{var "v"}} == nil {
- {{var "rl"}}, _ = z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }})
- {{var "v"}} = make({{ .CTyp }}, {{var "rl"}})
- {{var "c"}} = true
- }
- for {{var "r"}} := 0; {{var "r"}} < {{var "l"}}; {{var "r"}}++ {
- {{var "h"}}.ElemContainerState({{var "r"}})
- var {{var "t"}} {{ .Typ }}
- {{ $x := printf "%st%s" .TempVar .Rand }}{{ decLineVar $x }}
- {{var "v"}} <- {{var "t"}}
- }
- {{ else }} var {{var "rr"}}, {{var "rl"}} int {{/* // num2read, length of slice/array/chan */}}
- var {{var "rt"}} bool {{/* truncated */}}
- _, _, _ = {{var "rr"}}, {{var "rl"}}, {{var "rt"}}
+} else {
+ {{var "hl"}} := {{var "l"}} > 0
+ var {{var "rl"}} int; _ = {{var "rl"}}
+ {{if isSlice }} if {{var "hl"}} {
if {{var "l"}} > cap({{var "v"}}) {
- {{if isArray }}z.DecArrayCannotExpand(len({{var "v"}}), {{var "l"}})
- {{ else }}{{if not .Immutable }}
- {{var "rg"}} := len({{var "v"}}) > 0
- {{var "v2"}} := {{var "v"}} {{end}}
- {{var "rl"}}, {{var "rt"}} = z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }})
- if {{var "rt"}} {
- if {{var "rl"}} <= cap({{var "v"}}) {
- {{var "v"}} = {{var "v"}}[:{{var "rl"}}]
- } else {
- {{var "v"}} = make([]{{ .Typ }}, {{var "rl"}})
- }
+ {{var "rl"}} = z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }})
+ if {{var "rl"}} <= cap({{var "v"}}) {
+ {{var "v"}} = {{var "v"}}[:{{var "rl"}}]
} else {
{{var "v"}} = make([]{{ .Typ }}, {{var "rl"}})
}
{{var "c"}} = true
- {{var "rr"}} = len({{var "v"}}) {{if not .Immutable }}
- if {{var "rg"}} { copy({{var "v"}}, {{var "v2"}}) } {{end}} {{end}}{{/* end not Immutable, isArray */}}
- } {{if isSlice }} else if {{var "l"}} != len({{var "v"}}) {
+ } else if {{var "l"}} != len({{var "v"}}) {
{{var "v"}} = {{var "v"}}[:{{var "l"}}]
{{var "c"}} = true
- } {{end}} {{/* end isSlice:47 */}}
- {{var "j"}} := 0
- for ; {{var "j"}} < {{var "rr"}} ; {{var "j"}}++ {
- {{var "h"}}.ElemContainerState({{var "j"}})
- {{ $x := printf "%[1]vv%[2]v[%[1]vj%[2]v]" .TempVar .Rand }}{{ decLineVar $x }}
}
- {{if isArray }}for ; {{var "j"}} < {{var "l"}} ; {{var "j"}}++ {
- {{var "h"}}.ElemContainerState({{var "j"}})
- z.DecSwallow()
- }
- {{ else }}if {{var "rt"}} {
- for ; {{var "j"}} < {{var "l"}} ; {{var "j"}}++ {
- {{var "v"}} = append({{var "v"}}, {{ zero}})
- {{var "h"}}.ElemContainerState({{var "j"}})
- {{ $x := printf "%[1]vv%[2]v[%[1]vj%[2]v]" .TempVar .Rand }}{{ decLineVar $x }}
- }
- } {{end}} {{/* end isArray:56 */}}
- {{end}} {{/* end isChan:16 */}}
-} else { {{/* len < 0 */}}
- {{var "j"}} := 0
- for ; !r.CheckBreak(); {{var "j"}}++ {
- {{if isChan }}
+ } {{end}}
+ var {{var "j"}} int
+ // var {{var "dn"}} bool
+ for ; ({{var "hl"}} && {{var "j"}} < {{var "l"}}) || !({{var "hl"}} || r.CheckBreak()); {{var "j"}}++ {
+ {{if not isArray}} if {{var "j"}} == 0 && len({{var "v"}}) == 0 {
+ if {{var "hl"}} {
+ {{var "rl"}} = z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }})
+ } else {
+ {{var "rl"}} = 8
+ }
+ {{var "v"}} = make([]{{ .Typ }}, {{var "rl"}})
+ {{var "c"}} = true
+ }{{end}}
{{var "h"}}.ElemContainerState({{var "j"}})
- var {{var "t"}} {{ .Typ }}
- {{ $x := printf "%st%s" .TempVar .Rand }}{{ decLineVar $x }}
- {{var "v"}} <- {{var "t"}}
- {{ else }}
+ // {{var "dn"}} = r.TryDecodeAsNil()
+ {{if isChan}}{{ $x := printf "%[1]vv%[2]v" .TempVar .Rand }}var {{var $x}} {{ .Typ }}
+ {{ decLineVar $x }}
+ {{var "v"}} <- {{ $x }}
+ {{else}}
+ // if indefinite, etc, then expand the slice if necessary
+ var {{var "db"}} bool
if {{var "j"}} >= len({{var "v"}}) {
- {{if isArray }}z.DecArrayCannotExpand(len({{var "v"}}), {{var "j"}}+1)
- {{ else }}{{var "v"}} = append({{var "v"}}, {{zero}})// var {{var "z"}} {{ .Typ }}
- {{var "c"}} = true {{end}}
+ {{if isSlice }} {{var "v"}} = append({{var "v"}}, {{ zero }}); {{var "c"}} = true
+ {{else}} z.DecArrayCannotExpand(len(v), {{var "j"}}+1); {{var "db"}} = true
+ {{end}}
}
- {{var "h"}}.ElemContainerState({{var "j"}})
- if {{var "j"}} < len({{var "v"}}) {
- {{ $x := printf "%[1]vv%[2]v[%[1]vj%[2]v]" .TempVar .Rand }}{{ decLineVar $x }}
- } else {
+ if {{var "db"}} {
z.DecSwallow()
+ } else {
+ {{ $x := printf "%[1]vv%[2]v[%[1]vj%[2]v]" .TempVar .Rand }}{{ decLineVar $x }}
}
- {{end}}
+ {{end}}
}
- {{if isSlice }}if {{var "j"}} < len({{var "v"}}) {
+ {{if isSlice}} if {{var "j"}} < len({{var "v"}}) {
{{var "v"}} = {{var "v"}}[:{{var "j"}}]
{{var "c"}} = true
} else if {{var "j"}} == 0 && {{var "v"}} == nil {
- {{var "v"}} = []{{ .Typ }}{}
+ {{var "v"}} = make([]{{ .Typ }}, 0)
{{var "c"}} = true
- }{{end}}
+ } {{end}}
}
{{var "h"}}.End()
{{if not isArray }}if {{var "c"}} {
*{{ .Varname }} = {{var "v"}}
}{{end}}
+
diff --git a/codec/gen-dec-map.go.tmpl b/codec/gen-dec-map.go.tmpl
index 77400e0..8323b54 100644
--- a/codec/gen-dec-map.go.tmpl
+++ b/codec/gen-dec-map.go.tmpl
@@ -2,21 +2,22 @@
{{var "l"}} := r.ReadMapStart()
{{var "bh"}} := z.DecBasicHandle()
if {{var "v"}} == nil {
- {{var "rl"}}, _ := z.DecInferLen({{var "l"}}, {{var "bh"}}.MaxInitLen, {{ .Size }})
+ {{var "rl"}} := z.DecInferLen({{var "l"}}, {{var "bh"}}.MaxInitLen, {{ .Size }})
{{var "v"}} = make(map[{{ .KTyp }}]{{ .Typ }}, {{var "rl"}})
*{{ .Varname }} = {{var "v"}}
}
var {{var "mk"}} {{ .KTyp }}
var {{var "mv"}} {{ .Typ }}
-var {{var "mg"}} {{if decElemKindPtr}}, {{var "ms"}}, {{var "mok"}}{{end}} bool
+var {{var "mg"}}, {{var "mdn"}} {{if decElemKindPtr}}, {{var "ms"}}, {{var "mok"}}{{end}} bool
if {{var "bh"}}.MapValueReset {
{{if decElemKindPtr}}{{var "mg"}} = true
{{else if decElemKindIntf}}if !{{var "bh"}}.InterfaceReset { {{var "mg"}} = true }
{{else if not decElemKindImmutable}}{{var "mg"}} = true
{{end}} }
-if {{var "l"}} > 0 {
-for {{var "j"}} := 0; {{var "j"}} < {{var "l"}}; {{var "j"}}++ {
- z.DecSendContainerState(codecSelfer_containerMapKey{{ .Sfx }})
+if {{var "l"}} != 0 {
+{{var "hl"}} := {{var "l"}} > 0
+ for {{var "j"}} := 0; ({{var "hl"}} && {{var "j"}} < {{var "l"}}) || !({{var "hl"}} || r.CheckBreak()); {{var "j"}}++ {
+ r.ReadMapElemKey() {{/* z.DecSendContainerState(codecSelfer_containerMapKey{{ .Sfx }}) */}}
{{ $x := printf "%vmk%v" .TempVar .Rand }}{{ decLineVarK $x }}
{{ if eq .KTyp "interface{}" }}{{/* // special case if a byte array. */}}if {{var "bv"}}, {{var "bok"}} := {{var "mk"}}.([]byte); {{var "bok"}} {
{{var "mk"}} = string({{var "bv"}})
@@ -28,31 +29,14 @@ for {{var "j"}} := 0; {{var "j"}} < {{var "l"}}; {{var "j"}}++ {
{{var "ms"}} = false
} {{else}}{{var "mv"}} = {{var "v"}}[{{var "mk"}}] {{end}}
} {{if not decElemKindImmutable}}else { {{var "mv"}} = {{decElemZero}} }{{end}}
- z.DecSendContainerState(codecSelfer_containerMapValue{{ .Sfx }})
- {{ $x := printf "%vmv%v" .TempVar .Rand }}{{ decLineVar $x }}
- if {{if decElemKindPtr}} {{var "ms"}} && {{end}} {{var "v"}} != nil {
- {{var "v"}}[{{var "mk"}}] = {{var "mv"}}
- }
-}
-} else if {{var "l"}} < 0 {
-for {{var "j"}} := 0; !r.CheckBreak(); {{var "j"}}++ {
- z.DecSendContainerState(codecSelfer_containerMapKey{{ .Sfx }})
- {{ $x := printf "%vmk%v" .TempVar .Rand }}{{ decLineVarK $x }}
-{{ if eq .KTyp "interface{}" }}{{/* // special case if a byte array. */}}if {{var "bv"}}, {{var "bok"}} := {{var "mk"}}.([]byte); {{var "bok"}} {
- {{var "mk"}} = string({{var "bv"}})
- }{{ end }}{{if decElemKindPtr}}
- {{var "ms"}} = true {{ end }}
- if {{var "mg"}} {
- {{if decElemKindPtr}}{{var "mv"}}, {{var "mok"}} = {{var "v"}}[{{var "mk"}}]
- if {{var "mok"}} {
- {{var "ms"}} = false
- } {{else}}{{var "mv"}} = {{var "v"}}[{{var "mk"}}] {{end}}
- } {{if not decElemKindImmutable}}else { {{var "mv"}} = {{decElemZero}} }{{end}}
- z.DecSendContainerState(codecSelfer_containerMapValue{{ .Sfx }})
- {{ $x := printf "%vmv%v" .TempVar .Rand }}{{ decLineVar $x }}
- if {{if decElemKindPtr}} {{var "ms"}} && {{end}} {{var "v"}} != nil {
+ r.ReadMapElemValue() {{/* z.DecSendContainerState(codecSelfer_containerMapValue{{ .Sfx }}) */}}
+ {{var "mdn"}} = false
+ {{ $x := printf "%vmv%v" .TempVar .Rand }}{{ $y := printf "%vmdn%v" .TempVar .Rand }}{{ decLineVar $x $y }}
+ if {{var "mdn"}} {
+ if {{ var "bh" }}.DeleteOnNilMapValue { delete({{var "v"}}, {{var "mk"}}) } else { {{var "v"}}[{{var "mk"}}] = {{decElemZero}} }
+ } else if {{if decElemKindPtr}} {{var "ms"}} && {{end}} {{var "v"}} != nil {
{{var "v"}}[{{var "mk"}}] = {{var "mv"}}
}
}
} // else len==0: TODO: Should we clear map entries?
-z.DecSendContainerState(codecSelfer_containerMapEnd{{ .Sfx }})
+r.ReadMapEnd() {{/* z.DecSendContainerState(codecSelfer_containerMapEnd{{ .Sfx }}) */}}
diff --git a/codec/gen-helper.generated.go b/codec/gen-helper.generated.go
index 22bce77..9293463 100644
--- a/codec/gen-helper.generated.go
+++ b/codec/gen-helper.generated.go
@@ -1,4 +1,4 @@
-// //+build ignore
+/* // +build ignore */
// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
// Use of this source code is governed by a MIT license found in the LICENSE file.
@@ -15,9 +15,12 @@ import (
"reflect"
)
+// GenVersion is the current version of codecgen.
+const GenVersion = 8
+
// This file is used to generate helper code for codecgen.
// The values here i.e. genHelper(En|De)coder are not to be used directly by
-// library users. They WILL change continously and without notice.
+// library users. They WILL change continuously and without notice.
//
// To help enforce this, we create an unexported type with exported members.
// The only way to get the type is via the one exported type that we control (somewhat).
@@ -26,17 +29,24 @@ import (
// to perform encoding or decoding of primitives or known slice or map types.
// GenHelperEncoder is exported so that it can be used externally by codecgen.
+//
// Library users: DO NOT USE IT DIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE.
func GenHelperEncoder(e *Encoder) (genHelperEncoder, encDriver) {
return genHelperEncoder{e: e}, e.e
}
// GenHelperDecoder is exported so that it can be used externally by codecgen.
+//
// Library users: DO NOT USE IT DIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE.
func GenHelperDecoder(d *Decoder) (genHelperDecoder, decDriver) {
return genHelperDecoder{d: d}, d.d
}
+// Library users: DO NOT USE IT DIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE.
+func BasicHandleDoNotUse(h Handle) *BasicHandle {
+ return h.getBasicHandle()
+}
+
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
type genHelperEncoder struct {
e *Encoder
@@ -56,13 +66,14 @@ func (f genHelperEncoder) EncBasicHandle() *BasicHandle {
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperEncoder) EncBinary() bool {
- return f.e.be // f.e.hh.isBinaryEncoding()
+ return f.e.cf.be // f.e.hh.isBinaryEncoding()
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperEncoder) EncFallback(iv interface{}) {
// println(">>>>>>>>> EncFallback")
- f.e.encodeI(iv, false, false)
+ // f.e.encodeI(iv, false, false)
+ f.e.encodeValue(reflect.ValueOf(iv), nil, false)
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
@@ -84,6 +95,11 @@ func (f genHelperEncoder) EncBinaryMarshal(iv encoding.BinaryMarshaler) {
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
+func (f genHelperEncoder) EncRaw(iv Raw) {
+ f.e.rawBytes(iv)
+}
+
+// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperEncoder) TimeRtidIfBinc() uintptr {
if _, ok := f.e.hh.(*BincHandle); ok {
return timeTypId
@@ -93,7 +109,7 @@ func (f genHelperEncoder) TimeRtidIfBinc() uintptr {
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperEncoder) IsJSONHandle() bool {
- return f.e.js
+ return f.e.cf.js
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
@@ -107,7 +123,7 @@ func (f genHelperEncoder) EncExt(v interface{}) (r bool) {
if rt.Kind() == reflect.Ptr {
rt = rt.Elem()
}
- rtid := reflect.ValueOf(rt).Pointer()
+ rtid := rt2id(rt)
if xfFn := f.e.h.getExt(rtid); xfFn != nil {
f.e.e.EncodeExt(v, xfFn.tag, xfFn.ext, f.e)
return true
@@ -115,13 +131,6 @@ func (f genHelperEncoder) EncExt(v interface{}) (r bool) {
return false
}
-// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
-func (f genHelperEncoder) EncSendContainerState(c containerState) {
- if f.e.cr != nil {
- f.e.cr.sendContainerState(c)
- }
-}
-
// ---------------- DECODER FOLLOWS -----------------
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
@@ -147,7 +156,12 @@ func (f genHelperDecoder) DecScratchBuffer() []byte {
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperDecoder) DecFallback(iv interface{}, chkPtr bool) {
// println(">>>>>>>>> DecFallback")
- f.d.decodeI(iv, chkPtr, false, false, false)
+ rv := reflect.ValueOf(iv)
+ if chkPtr {
+ rv = f.d.ensureDecodeable(rv)
+ }
+ f.d.decodeValue(rv, nil, false, false)
+ // f.d.decodeValueFallback(rv)
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
@@ -167,7 +181,7 @@ func (f genHelperDecoder) DecArrayCannotExpand(sliceLen, streamLen int) {
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperDecoder) DecTextUnmarshal(tm encoding.TextUnmarshaler) {
- fnerr := tm.UnmarshalText(f.d.d.DecodeBytes(f.d.b[:], true, true))
+ fnerr := tm.UnmarshalText(f.d.d.DecodeStringAsBytes())
if fnerr != nil {
panic(fnerr)
}
@@ -175,7 +189,7 @@ func (f genHelperDecoder) DecTextUnmarshal(tm encoding.TextUnmarshaler) {
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperDecoder) DecJSONUnmarshal(tm jsonUnmarshaler) {
- // bs := f.dd.DecodeBytes(f.d.b[:], true, true)
+ // bs := f.dd.DecodeStringAsBytes()
// grab the bytes to be read, as UnmarshalJSON needs the full JSON so as to unmarshal it itself.
fnerr := tm.UnmarshalJSON(f.d.nextValueBytes())
if fnerr != nil {
@@ -185,13 +199,18 @@ func (f genHelperDecoder) DecJSONUnmarshal(tm jsonUnmarshaler) {
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperDecoder) DecBinaryUnmarshal(bm encoding.BinaryUnmarshaler) {
- fnerr := bm.UnmarshalBinary(f.d.d.DecodeBytes(nil, false, true))
+ fnerr := bm.UnmarshalBinary(f.d.d.DecodeBytes(nil, true))
if fnerr != nil {
panic(fnerr)
}
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
+func (f genHelperDecoder) DecRaw() []byte {
+ return f.d.rawBytes()
+}
+
+// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperDecoder) TimeRtidIfBinc() uintptr {
if _, ok := f.d.hh.(*BincHandle); ok {
return timeTypId
@@ -212,7 +231,7 @@ func (f genHelperDecoder) HasExtensions() bool {
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperDecoder) DecExt(v interface{}) (r bool) {
rt := reflect.TypeOf(v).Elem()
- rtid := reflect.ValueOf(rt).Pointer()
+ rtid := rt2id(rt)
if xfFn := f.d.h.getExt(rtid); xfFn != nil {
f.d.d.DecodeExt(v, xfFn.tag, xfFn.ext)
return true
@@ -221,13 +240,11 @@ func (f genHelperDecoder) DecExt(v interface{}) (r bool) {
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
-func (f genHelperDecoder) DecInferLen(clen, maxlen, unit int) (rvlen int, truncated bool) {
+func (f genHelperDecoder) DecInferLen(clen, maxlen, unit int) (rvlen int) {
return decInferLen(clen, maxlen, unit)
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
-func (f genHelperDecoder) DecSendContainerState(c containerState) {
- if f.d.cr != nil {
- f.d.cr.sendContainerState(c)
- }
+func (f genHelperDecoder) StringView(v []byte) string {
+ return stringView(v)
}
diff --git a/codec/gen-helper.go.tmpl b/codec/gen-helper.go.tmpl
index 3195857..dfa1def 100644
--- a/codec/gen-helper.go.tmpl
+++ b/codec/gen-helper.go.tmpl
@@ -1,4 +1,4 @@
-// //+build ignore
+/* // +build ignore */
// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
// Use of this source code is governed by a MIT license found in the LICENSE file.
@@ -15,9 +15,12 @@ import (
"reflect"
)
+// GenVersion is the current version of codecgen.
+const GenVersion = {{ .Version }}
+
// This file is used to generate helper code for codecgen.
// The values here i.e. genHelper(En|De)coder are not to be used directly by
-// library users. They WILL change continously and without notice.
+// library users. They WILL change continuously and without notice.
//
// To help enforce this, we create an unexported type with exported members.
// The only way to get the type is via the one exported type that we control (somewhat).
@@ -26,17 +29,24 @@ import (
// to perform encoding or decoding of primitives or known slice or map types.
// GenHelperEncoder is exported so that it can be used externally by codecgen.
+//
// Library users: DO NOT USE IT DIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE.
func GenHelperEncoder(e *Encoder) (genHelperEncoder, encDriver) {
return genHelperEncoder{e:e}, e.e
}
// GenHelperDecoder is exported so that it can be used externally by codecgen.
+//
// Library users: DO NOT USE IT DIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE.
func GenHelperDecoder(d *Decoder) (genHelperDecoder, decDriver) {
return genHelperDecoder{d:d}, d.d
}
+// Library users: DO NOT USE IT DIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE.
+func BasicHandleDoNotUse(h Handle) *BasicHandle {
+ return h.getBasicHandle()
+}
+
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
type genHelperEncoder struct {
e *Encoder
@@ -56,12 +66,13 @@ func (f genHelperEncoder) EncBasicHandle() *BasicHandle {
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperEncoder) EncBinary() bool {
- return f.e.be // f.e.hh.isBinaryEncoding()
+ return f.e.cf.be // f.e.hh.isBinaryEncoding()
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperEncoder) EncFallback(iv interface{}) {
// println(">>>>>>>>> EncFallback")
- f.e.encodeI(iv, false, false)
+ // f.e.encodeI(iv, false, false)
+ f.e.encodeValue(reflect.ValueOf(iv), nil, false)
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperEncoder) EncTextMarshal(iv encoding.TextMarshaler) {
@@ -79,6 +90,10 @@ func (f genHelperEncoder) EncBinaryMarshal(iv encoding.BinaryMarshaler) {
f.e.marshal(bs, fnerr, false, c_RAW)
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
+func (f genHelperEncoder) EncRaw(iv Raw) {
+ f.e.rawBytes(iv)
+}
+// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperEncoder) TimeRtidIfBinc() uintptr {
if _, ok := f.e.hh.(*BincHandle); ok {
return timeTypId
@@ -87,7 +102,7 @@ func (f genHelperEncoder) TimeRtidIfBinc() uintptr {
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperEncoder) IsJSONHandle() bool {
- return f.e.js
+ return f.e.cf.js
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperEncoder) HasExtensions() bool {
@@ -99,19 +114,21 @@ func (f genHelperEncoder) EncExt(v interface{}) (r bool) {
if rt.Kind() == reflect.Ptr {
rt = rt.Elem()
}
- rtid := reflect.ValueOf(rt).Pointer()
+ rtid := rt2id(rt)
if xfFn := f.e.h.getExt(rtid); xfFn != nil {
f.e.e.EncodeExt(v, xfFn.tag, xfFn.ext, f.e)
return true
}
return false
}
+{{/*
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperEncoder) EncSendContainerState(c containerState) {
if f.e.cr != nil {
f.e.cr.sendContainerState(c)
}
}
+*/}}
// ---------------- DECODER FOLLOWS -----------------
@@ -134,7 +151,12 @@ func (f genHelperDecoder) DecScratchBuffer() []byte {
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperDecoder) DecFallback(iv interface{}, chkPtr bool) {
// println(">>>>>>>>> DecFallback")
- f.d.decodeI(iv, chkPtr, false, false, false)
+ rv := reflect.ValueOf(iv)
+ if chkPtr {
+ rv = f.d.ensureDecodeable(rv)
+ }
+ f.d.decodeValue(rv, nil, false, false)
+ // f.d.decodeValueFallback(rv)
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperDecoder) DecSliceHelperStart() (decSliceHelper, int) {
@@ -150,14 +172,14 @@ func (f genHelperDecoder) DecArrayCannotExpand(sliceLen, streamLen int) {
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperDecoder) DecTextUnmarshal(tm encoding.TextUnmarshaler) {
- fnerr := tm.UnmarshalText(f.d.d.DecodeBytes(f.d.b[:], true, true))
+ fnerr := tm.UnmarshalText(f.d.d.DecodeStringAsBytes())
if fnerr != nil {
panic(fnerr)
}
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperDecoder) DecJSONUnmarshal(tm jsonUnmarshaler) {
- // bs := f.dd.DecodeBytes(f.d.b[:], true, true)
+ // bs := f.dd.DecodeStringAsBytes()
// grab the bytes to be read, as UnmarshalJSON needs the full JSON so as to unmarshal it itself.
fnerr := tm.UnmarshalJSON(f.d.nextValueBytes())
if fnerr != nil {
@@ -166,12 +188,16 @@ func (f genHelperDecoder) DecJSONUnmarshal(tm jsonUnmarshaler) {
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperDecoder) DecBinaryUnmarshal(bm encoding.BinaryUnmarshaler) {
- fnerr := bm.UnmarshalBinary(f.d.d.DecodeBytes(nil, false, true))
+ fnerr := bm.UnmarshalBinary(f.d.d.DecodeBytes(nil, true))
if fnerr != nil {
panic(fnerr)
}
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
+func (f genHelperDecoder) DecRaw() []byte {
+ return f.d.rawBytes()
+}
+// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperDecoder) TimeRtidIfBinc() uintptr {
if _, ok := f.d.hh.(*BincHandle); ok {
return timeTypId
@@ -189,7 +215,7 @@ func (f genHelperDecoder) HasExtensions() bool {
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperDecoder) DecExt(v interface{}) (r bool) {
rt := reflect.TypeOf(v).Elem()
- rtid := reflect.ValueOf(rt).Pointer()
+ rtid := rt2id(rt)
if xfFn := f.d.h.getExt(rtid); xfFn != nil {
f.d.d.DecodeExt(v, xfFn.tag, xfFn.ext)
return true
@@ -197,15 +223,21 @@ func (f genHelperDecoder) DecExt(v interface{}) (r bool) {
return false
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
-func (f genHelperDecoder) DecInferLen(clen, maxlen, unit int) (rvlen int, truncated bool) {
+func (f genHelperDecoder) DecInferLen(clen, maxlen, unit int) (rvlen int) {
return decInferLen(clen, maxlen, unit)
}
// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
+func (f genHelperDecoder) StringView(v []byte) string {
+ return stringView(v)
+}
+{{/*
+// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*
func (f genHelperDecoder) DecSendContainerState(c containerState) {
if f.d.cr != nil {
f.d.cr.sendContainerState(c)
}
}
+*/}}
{{/*
diff --git a/codec/gen.generated.go b/codec/gen.generated.go
index 151445d..b50a602 100644
--- a/codec/gen.generated.go
+++ b/codec/gen.generated.go
@@ -10,21 +10,22 @@ const genDecMapTmpl = `
{{var "l"}} := r.ReadMapStart()
{{var "bh"}} := z.DecBasicHandle()
if {{var "v"}} == nil {
- {{var "rl"}}, _ := z.DecInferLen({{var "l"}}, {{var "bh"}}.MaxInitLen, {{ .Size }})
+ {{var "rl"}} := z.DecInferLen({{var "l"}}, {{var "bh"}}.MaxInitLen, {{ .Size }})
{{var "v"}} = make(map[{{ .KTyp }}]{{ .Typ }}, {{var "rl"}})
*{{ .Varname }} = {{var "v"}}
}
var {{var "mk"}} {{ .KTyp }}
var {{var "mv"}} {{ .Typ }}
-var {{var "mg"}} {{if decElemKindPtr}}, {{var "ms"}}, {{var "mok"}}{{end}} bool
+var {{var "mg"}}, {{var "mdn"}} {{if decElemKindPtr}}, {{var "ms"}}, {{var "mok"}}{{end}} bool
if {{var "bh"}}.MapValueReset {
{{if decElemKindPtr}}{{var "mg"}} = true
{{else if decElemKindIntf}}if !{{var "bh"}}.InterfaceReset { {{var "mg"}} = true }
{{else if not decElemKindImmutable}}{{var "mg"}} = true
{{end}} }
-if {{var "l"}} > 0 {
-for {{var "j"}} := 0; {{var "j"}} < {{var "l"}}; {{var "j"}}++ {
- z.DecSendContainerState(codecSelfer_containerMapKey{{ .Sfx }})
+if {{var "l"}} != 0 {
+{{var "hl"}} := {{var "l"}} > 0
+ for {{var "j"}} := 0; ({{var "hl"}} && {{var "j"}} < {{var "l"}}) || !({{var "hl"}} || r.CheckBreak()); {{var "j"}}++ {
+ r.ReadMapElemKey() {{/* z.DecSendContainerState(codecSelfer_containerMapKey{{ .Sfx }}) */}}
{{ $x := printf "%vmk%v" .TempVar .Rand }}{{ decLineVarK $x }}
{{ if eq .KTyp "interface{}" }}{{/* // special case if a byte array. */}}if {{var "bv"}}, {{var "bok"}} := {{var "mk"}}.([]byte); {{var "bok"}} {
{{var "mk"}} = string({{var "bv"}})
@@ -36,34 +37,17 @@ for {{var "j"}} := 0; {{var "j"}} < {{var "l"}}; {{var "j"}}++ {
{{var "ms"}} = false
} {{else}}{{var "mv"}} = {{var "v"}}[{{var "mk"}}] {{end}}
} {{if not decElemKindImmutable}}else { {{var "mv"}} = {{decElemZero}} }{{end}}
- z.DecSendContainerState(codecSelfer_containerMapValue{{ .Sfx }})
- {{ $x := printf "%vmv%v" .TempVar .Rand }}{{ decLineVar $x }}
- if {{if decElemKindPtr}} {{var "ms"}} && {{end}} {{var "v"}} != nil {
- {{var "v"}}[{{var "mk"}}] = {{var "mv"}}
- }
-}
-} else if {{var "l"}} < 0 {
-for {{var "j"}} := 0; !r.CheckBreak(); {{var "j"}}++ {
- z.DecSendContainerState(codecSelfer_containerMapKey{{ .Sfx }})
- {{ $x := printf "%vmk%v" .TempVar .Rand }}{{ decLineVarK $x }}
-{{ if eq .KTyp "interface{}" }}{{/* // special case if a byte array. */}}if {{var "bv"}}, {{var "bok"}} := {{var "mk"}}.([]byte); {{var "bok"}} {
- {{var "mk"}} = string({{var "bv"}})
- }{{ end }}{{if decElemKindPtr}}
- {{var "ms"}} = true {{ end }}
- if {{var "mg"}} {
- {{if decElemKindPtr}}{{var "mv"}}, {{var "mok"}} = {{var "v"}}[{{var "mk"}}]
- if {{var "mok"}} {
- {{var "ms"}} = false
- } {{else}}{{var "mv"}} = {{var "v"}}[{{var "mk"}}] {{end}}
- } {{if not decElemKindImmutable}}else { {{var "mv"}} = {{decElemZero}} }{{end}}
- z.DecSendContainerState(codecSelfer_containerMapValue{{ .Sfx }})
- {{ $x := printf "%vmv%v" .TempVar .Rand }}{{ decLineVar $x }}
- if {{if decElemKindPtr}} {{var "ms"}} && {{end}} {{var "v"}} != nil {
+ r.ReadMapElemValue() {{/* z.DecSendContainerState(codecSelfer_containerMapValue{{ .Sfx }}) */}}
+ {{var "mdn"}} = false
+ {{ $x := printf "%vmv%v" .TempVar .Rand }}{{ $y := printf "%vmdn%v" .TempVar .Rand }}{{ decLineVar $x $y }}
+ if {{var "mdn"}} {
+ if {{ var "bh" }}.DeleteOnNilMapValue { delete({{var "v"}}, {{var "mk"}}) } else { {{var "v"}}[{{var "mk"}}] = {{decElemZero}} }
+ } else if {{if decElemKindPtr}} {{var "ms"}} && {{end}} {{var "v"}} != nil {
{{var "v"}}[{{var "mk"}}] = {{var "mv"}}
}
}
} // else len==0: TODO: Should we clear map entries?
-z.DecSendContainerState(codecSelfer_containerMapEnd{{ .Sfx }})
+r.ReadMapEnd() {{/* z.DecSendContainerState(codecSelfer_containerMapEnd{{ .Sfx }}) */}}
`
const genDecListTmpl = `
@@ -82,93 +66,67 @@ if {{var "l"}} == 0 {
{{var "v"}} = make({{ .CTyp }}, 0)
{{var "c"}} = true
} {{end}}
-} else if {{var "l"}} > 0 {
- {{if isChan }}if {{var "v"}} == nil {
- {{var "rl"}}, _ = z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }})
- {{var "v"}} = make({{ .CTyp }}, {{var "rl"}})
- {{var "c"}} = true
- }
- for {{var "r"}} := 0; {{var "r"}} < {{var "l"}}; {{var "r"}}++ {
- {{var "h"}}.ElemContainerState({{var "r"}})
- var {{var "t"}} {{ .Typ }}
- {{ $x := printf "%st%s" .TempVar .Rand }}{{ decLineVar $x }}
- {{var "v"}} <- {{var "t"}}
- }
- {{ else }} var {{var "rr"}}, {{var "rl"}} int {{/* // num2read, length of slice/array/chan */}}
- var {{var "rt"}} bool {{/* truncated */}}
- _, _, _ = {{var "rr"}}, {{var "rl"}}, {{var "rt"}}
+} else {
+ {{var "hl"}} := {{var "l"}} > 0
+ var {{var "rl"}} int; _ = {{var "rl"}}
+ {{if isSlice }} if {{var "hl"}} {
if {{var "l"}} > cap({{var "v"}}) {
- {{if isArray }}z.DecArrayCannotExpand(len({{var "v"}}), {{var "l"}})
- {{ else }}{{if not .Immutable }}
- {{var "rg"}} := len({{var "v"}}) > 0
- {{var "v2"}} := {{var "v"}} {{end}}
- {{var "rl"}}, {{var "rt"}} = z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }})
- if {{var "rt"}} {
- if {{var "rl"}} <= cap({{var "v"}}) {
- {{var "v"}} = {{var "v"}}[:{{var "rl"}}]
- } else {
- {{var "v"}} = make([]{{ .Typ }}, {{var "rl"}})
- }
+ {{var "rl"}} = z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }})
+ if {{var "rl"}} <= cap({{var "v"}}) {
+ {{var "v"}} = {{var "v"}}[:{{var "rl"}}]
} else {
{{var "v"}} = make([]{{ .Typ }}, {{var "rl"}})
}
{{var "c"}} = true
- {{var "rr"}} = len({{var "v"}}) {{if not .Immutable }}
- if {{var "rg"}} { copy({{var "v"}}, {{var "v2"}}) } {{end}} {{end}}{{/* end not Immutable, isArray */}}
- } {{if isSlice }} else if {{var "l"}} != len({{var "v"}}) {
+ } else if {{var "l"}} != len({{var "v"}}) {
{{var "v"}} = {{var "v"}}[:{{var "l"}}]
{{var "c"}} = true
- } {{end}} {{/* end isSlice:47 */}}
- {{var "j"}} := 0
- for ; {{var "j"}} < {{var "rr"}} ; {{var "j"}}++ {
- {{var "h"}}.ElemContainerState({{var "j"}})
- {{ $x := printf "%[1]vv%[2]v[%[1]vj%[2]v]" .TempVar .Rand }}{{ decLineVar $x }}
- }
- {{if isArray }}for ; {{var "j"}} < {{var "l"}} ; {{var "j"}}++ {
- {{var "h"}}.ElemContainerState({{var "j"}})
- z.DecSwallow()
}
- {{ else }}if {{var "rt"}} {
- for ; {{var "j"}} < {{var "l"}} ; {{var "j"}}++ {
- {{var "v"}} = append({{var "v"}}, {{ zero}})
- {{var "h"}}.ElemContainerState({{var "j"}})
- {{ $x := printf "%[1]vv%[2]v[%[1]vj%[2]v]" .TempVar .Rand }}{{ decLineVar $x }}
- }
- } {{end}} {{/* end isArray:56 */}}
- {{end}} {{/* end isChan:16 */}}
-} else { {{/* len < 0 */}}
- {{var "j"}} := 0
- for ; !r.CheckBreak(); {{var "j"}}++ {
- {{if isChan }}
+ } {{end}}
+ var {{var "j"}} int
+ // var {{var "dn"}} bool
+ for ; ({{var "hl"}} && {{var "j"}} < {{var "l"}}) || !({{var "hl"}} || r.CheckBreak()); {{var "j"}}++ {
+ {{if not isArray}} if {{var "j"}} == 0 && len({{var "v"}}) == 0 {
+ if {{var "hl"}} {
+ {{var "rl"}} = z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }})
+ } else {
+ {{var "rl"}} = 8
+ }
+ {{var "v"}} = make([]{{ .Typ }}, {{var "rl"}})
+ {{var "c"}} = true
+ }{{end}}
{{var "h"}}.ElemContainerState({{var "j"}})
- var {{var "t"}} {{ .Typ }}
- {{ $x := printf "%st%s" .TempVar .Rand }}{{ decLineVar $x }}
- {{var "v"}} <- {{var "t"}}
- {{ else }}
+ // {{var "dn"}} = r.TryDecodeAsNil()
+ {{if isChan}}{{ $x := printf "%[1]vv%[2]v" .TempVar .Rand }}var {{var $x}} {{ .Typ }}
+ {{ decLineVar $x }}
+ {{var "v"}} <- {{ $x }}
+ {{else}}
+ // if indefinite, etc, then expand the slice if necessary
+ var {{var "db"}} bool
if {{var "j"}} >= len({{var "v"}}) {
- {{if isArray }}z.DecArrayCannotExpand(len({{var "v"}}), {{var "j"}}+1)
- {{ else }}{{var "v"}} = append({{var "v"}}, {{zero}})// var {{var "z"}} {{ .Typ }}
- {{var "c"}} = true {{end}}
+ {{if isSlice }} {{var "v"}} = append({{var "v"}}, {{ zero }}); {{var "c"}} = true
+ {{else}} z.DecArrayCannotExpand(len(v), {{var "j"}}+1); {{var "db"}} = true
+ {{end}}
}
- {{var "h"}}.ElemContainerState({{var "j"}})
- if {{var "j"}} < len({{var "v"}}) {
- {{ $x := printf "%[1]vv%[2]v[%[1]vj%[2]v]" .TempVar .Rand }}{{ decLineVar $x }}
- } else {
+ if {{var "db"}} {
z.DecSwallow()
+ } else {
+ {{ $x := printf "%[1]vv%[2]v[%[1]vj%[2]v]" .TempVar .Rand }}{{ decLineVar $x }}
}
- {{end}}
+ {{end}}
}
- {{if isSlice }}if {{var "j"}} < len({{var "v"}}) {
+ {{if isSlice}} if {{var "j"}} < len({{var "v"}}) {
{{var "v"}} = {{var "v"}}[:{{var "j"}}]
{{var "c"}} = true
} else if {{var "j"}} == 0 && {{var "v"}} == nil {
- {{var "v"}} = []{{ .Typ }}{}
+ {{var "v"}} = make([]{{ .Typ }}, 0)
{{var "c"}} = true
- }{{end}}
+ } {{end}}
}
{{var "h"}}.End()
{{if not isArray }}if {{var "c"}} {
*{{ .Varname }} = {{var "v"}}
}{{end}}
+
`
diff --git a/codec/gen.go b/codec/gen.go
index 5b27675..043f10d 100644
--- a/codec/gen.go
+++ b/codec/gen.go
@@ -1,3 +1,5 @@
+// +build codecgen.exec
+
// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
// Use of this source code is governed by a MIT license found in the LICENSE file.
@@ -12,7 +14,6 @@ import (
"io"
"io/ioutil"
"math/rand"
- "os"
"reflect"
"regexp"
"sort"
@@ -21,11 +22,14 @@ import (
"sync"
"text/template"
"time"
+ "unicode"
+ "unicode/utf8"
)
// ---------------------------------------------------
// codecgen supports the full cycle of reflection-based codec:
// - RawExt
+// - Raw
// - Builtins
// - Extensions
// - (Binary|Text|JSON)(Unm|M)arshal
@@ -76,8 +80,12 @@ import (
// codecgen will panic if the file was generated with an old version of the library in use.
//
// Note:
-// It was a concious decision to have gen.go always explicitly call EncodeNil or TryDecodeAsNil.
+// It was a conscious decision to have gen.go always explicitly call EncodeNil or TryDecodeAsNil.
// This way, there isn't a function call overhead just to see that we should not enter a block of code.
+//
+// Note:
+// codecgen-generated code depends on the variables defined by fast-path.generated.go.
+// consequently, you cannot run with tags "codecgen notfastpath".
// GenVersion is the current version of codecgen.
//
@@ -92,7 +100,8 @@ import (
// changes in signature of some unpublished helper methods and codecgen cmdline arguments.
// v4: Removed separator support from (en|de)cDriver, and refactored codec(gen)
// v5: changes to support faster json decoding. Let encoder/decoder maintain state of collections.
-const GenVersion = 5
+// v6: removed unsafe from gen, and now uses codecgen.exec tag
+const genVersion = 8
const (
genCodecPkg = "codec1978"
@@ -144,8 +153,7 @@ type genRunner struct {
is map[reflect.Type]struct{} // types seen during import search
bp string // base PkgPath, for which we are generating for
- cpfx string // codec package prefix
- unsafe bool // is unsafe to be used in generated code?
+ cpfx string // codec package prefix
tm map[reflect.Type]struct{} // types for which enc/dec must be generated
ts []reflect.Type // types for which enc/dec must be generated
@@ -155,30 +163,37 @@ type genRunner struct {
ti *TypeInfos
// rr *rand.Rand // random generator for file-specific types
+
+ nx bool // no extensions
}
// Gen will write a complete go file containing Selfer implementations for each
// type passed. All the types must be in the same package.
//
-// Library users: *DO NOT USE IT DIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE.*
-func Gen(w io.Writer, buildTags, pkgName, uid string, useUnsafe bool, ti *TypeInfos, typ ...reflect.Type) {
+// Library users: DO NOT USE IT DIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE.
+func Gen(w io.Writer, buildTags, pkgName, uid string, noExtensions bool,
+ ti *TypeInfos, typ ...reflect.Type) {
+ // All types passed to this method do not have a codec.Selfer method implemented directly.
+ // codecgen already checks the AST and skips any types that define the codec.Selfer methods.
+ // Consequently, there's no need to check and trim them if they implement codec.Selfer
+
if len(typ) == 0 {
return
}
x := genRunner{
- unsafe: useUnsafe,
- w: w,
- t: typ,
- te: make(map[uintptr]bool),
- td: make(map[uintptr]bool),
- im: make(map[string]reflect.Type),
- imn: make(map[string]string),
- is: make(map[reflect.Type]struct{}),
- tm: make(map[reflect.Type]struct{}),
- ts: []reflect.Type{},
- bp: genImportPath(typ[0]),
- xs: uid,
- ti: ti,
+ w: w,
+ t: typ,
+ te: make(map[uintptr]bool),
+ td: make(map[uintptr]bool),
+ im: make(map[string]reflect.Type),
+ imn: make(map[string]string),
+ is: make(map[reflect.Type]struct{}),
+ tm: make(map[reflect.Type]struct{}),
+ ts: []reflect.Type{},
+ bp: genImportPath(typ[0]),
+ xs: uid,
+ ti: ti,
+ nx: noExtensions,
}
if x.ti == nil {
x.ti = defTypeInfos
@@ -199,7 +214,7 @@ func Gen(w io.Writer, buildTags, pkgName, uid string, useUnsafe bool, ti *TypeIn
x.genRefPkgs(t)
}
if buildTags != "" {
- x.line("//+build " + buildTags)
+ x.line("// +build " + buildTags)
x.line("")
}
x.line(`
@@ -227,11 +242,8 @@ func Gen(w io.Writer, buildTags, pkgName, uid string, useUnsafe bool, ti *TypeIn
x.linef("%s \"%s\"", x.imn[k], k)
}
// add required packages
- for _, k := range [...]string{"reflect", "unsafe", "runtime", "fmt", "errors"} {
+ for _, k := range [...]string{"reflect", "runtime", "fmt", "errors"} {
if _, ok := x.im[k]; !ok {
- if k == "unsafe" && !x.unsafe {
- continue
- }
x.line("\"" + k + "\"")
}
}
@@ -258,19 +270,16 @@ func Gen(w io.Writer, buildTags, pkgName, uid string, useUnsafe bool, ti *TypeIn
x.line(")")
x.line("")
- if x.unsafe {
- x.line("type codecSelferUnsafeString" + x.xs + " struct { Data uintptr; Len int}")
- x.line("")
- }
x.hn = "codecSelfer" + x.xs
x.line("type " + x.hn + " struct{}")
x.line("")
+ x.varsfxreset()
x.line("func init() {")
- x.linef("if %sGenVersion != %v {", x.cpfx, GenVersion)
+ x.linef("if %sGenVersion != %v {", x.cpfx, genVersion)
x.line("_, file, _, _ := runtime.Caller(0)")
x.line(`err := fmt.Errorf("codecgen version mismatch: current: %v, need %v. Re-generate file: %v", `)
- x.linef(`%v, %sGenVersion, file)`, GenVersion, x.cpfx)
+ x.linef(`%v, %sGenVersion, file)`, genVersion, x.cpfx)
x.line("panic(err)")
x.linef("}")
x.line("if false { // reference the types, but skip this branch at build/run time")
@@ -281,10 +290,6 @@ func Gen(w io.Writer, buildTags, pkgName, uid string, useUnsafe bool, ti *TypeIn
x.linef("var v%v %s.%s", n, x.imn[k], t.Name())
n++
}
- if x.unsafe {
- x.linef("var v%v unsafe.Pointer", n)
- n++
- }
if n > 0 {
x.out("_")
for i := 1; i < n; i++ {
@@ -307,8 +312,9 @@ func Gen(w io.Writer, buildTags, pkgName, uid string, useUnsafe bool, ti *TypeIn
}
for _, t := range x.ts {
- rtid := reflect.ValueOf(t).Pointer()
+ rtid := rt2id(t)
// generate enc functions for all these slice/map types.
+ x.varsfxreset()
x.linef("func (x %s) enc%s(v %s%s, e *%sEncoder) {", x.hn, x.genMethodNameT(t), x.arr2str(t, "*"), x.genTypeName(t), x.cpfx)
x.genRequiredMethodVars(true)
switch t.Kind() {
@@ -323,6 +329,7 @@ func Gen(w io.Writer, buildTags, pkgName, uid string, useUnsafe bool, ti *TypeIn
x.line("")
// generate dec functions for all these slice/map types.
+ x.varsfxreset()
x.linef("func (x %s) dec%s(v *%s, d *%sDecoder) {", x.hn, x.genMethodNameT(t), x.genTypeName(t), x.cpfx)
x.genRequiredMethodVars(false)
switch t.Kind() {
@@ -377,7 +384,7 @@ func (x *genRunner) genRefPkgs(t reflect.Type) {
x.imn[tpkg] = tpkg
} else {
x.imc++
- x.imn[tpkg] = "pkg" + strconv.FormatUint(x.imc, 10) + "_" + tpkg[idx+1:]
+ x.imn[tpkg] = "pkg" + strconv.FormatUint(x.imc, 10) + "_" + genGoIdentifier(tpkg[idx+1:], false)
}
}
}
@@ -408,6 +415,10 @@ func (x *genRunner) varsfx() string {
return strconv.FormatUint(x.c, 10)
}
+func (x *genRunner) varsfxreset() {
+ x.c = 0
+}
+
func (x *genRunner) out(s string) {
if _, err := io.WriteString(x.w, s); err != nil {
panic(err)
@@ -494,6 +505,7 @@ func (x *genRunner) selfer(encode bool) {
// always make decode use a pointer receiver,
// and structs always use a ptr receiver (encode|decode)
isptr := !encode || t.Kind() == reflect.Struct
+ x.varsfxreset()
fnSigPfx := "func (x "
if isptr {
fnSigPfx += "*"
@@ -530,21 +542,21 @@ func (x *genRunner) selfer(encode bool) {
x.out(fnSigPfx)
x.line(") codecDecodeSelfFromMap(l int, d *" + x.cpfx + "Decoder) {")
x.genRequiredMethodVars(false)
- x.decStructMap(genTopLevelVarName, "l", reflect.ValueOf(t0).Pointer(), t0, genStructMapStyleConsolidated)
+ x.decStructMap(genTopLevelVarName, "l", rt2id(t0), t0, genStructMapStyleConsolidated)
x.line("}")
x.line("")
} else {
x.out(fnSigPfx)
x.line(") codecDecodeSelfFromMapLenPrefix(l int, d *" + x.cpfx + "Decoder) {")
x.genRequiredMethodVars(false)
- x.decStructMap(genTopLevelVarName, "l", reflect.ValueOf(t0).Pointer(), t0, genStructMapStyleLenPrefix)
+ x.decStructMap(genTopLevelVarName, "l", rt2id(t0), t0, genStructMapStyleLenPrefix)
x.line("}")
x.line("")
x.out(fnSigPfx)
x.line(") codecDecodeSelfFromMapCheckBreak(l int, d *" + x.cpfx + "Decoder) {")
x.genRequiredMethodVars(false)
- x.decStructMap(genTopLevelVarName, "l", reflect.ValueOf(t0).Pointer(), t0, genStructMapStyleCheckBreak)
+ x.decStructMap(genTopLevelVarName, "l", rt2id(t0), t0, genStructMapStyleCheckBreak)
x.line("}")
x.line("")
}
@@ -553,7 +565,7 @@ func (x *genRunner) selfer(encode bool) {
x.out(fnSigPfx)
x.line(") codecDecodeSelfFromArray(l int, d *" + x.cpfx + "Decoder) {")
x.genRequiredMethodVars(false)
- x.decStructArray(genTopLevelVarName, "l", "return", reflect.ValueOf(t0).Pointer(), t0)
+ x.decStructArray(genTopLevelVarName, "l", "return", rt2id(t0), t0)
x.line("}")
x.line("")
@@ -630,7 +642,7 @@ func (x *genRunner) encVar(varname string, t reflect.Type) {
// enc will encode a variable (varname) of type t,
// except t is of kind reflect.Struct or reflect.Array, wherein varname is of type ptrTo(T) (to prevent copying)
func (x *genRunner) enc(varname string, t reflect.Type) {
- rtid := reflect.ValueOf(t).Pointer()
+ rtid := rt2id(t)
// We call CodecEncodeSelf if one of the following are honored:
// - the type already implements Selfer, call that
// - the type has a Selfer implementation just created, use that
@@ -681,13 +693,17 @@ func (x *genRunner) enc(varname string, t reflect.Type) {
}
// check if
- // - type is RawExt
+ // - type is RawExt, Raw
// - the type implements (Text|JSON|Binary)(Unm|M)arshal
x.linef("%sm%s := z.EncBinary()", genTempVarPfx, mi)
x.linef("_ = %sm%s", genTempVarPfx, mi)
x.line("if false {") //start if block
defer func() { x.line("}") }() //end if block
+ if t == rawTyp {
+ x.linef("} else { z.EncRaw(%v)", varname)
+ return
+ }
if t == rawExtTyp {
x.linef("} else { r.EncodeRawExt(%v, e)", varname)
return
@@ -701,7 +717,7 @@ func (x *genRunner) enc(varname string, t reflect.Type) {
x.linef("r.EncodeBuiltin(%s, %s)", vrtid, varname)
}
// only check for extensions if the type is named, and has a packagePath.
- if genImportPath(t) != "" && t.Name() != "" {
+ if !x.nx && genImportPath(t) != "" && t.Name() != "" {
// first check if extensions are configued, before doing the interface conversion
x.linef("} else if z.HasExtensions() && z.EncExt(%s) {", varname)
}
@@ -761,7 +777,7 @@ func (x *genRunner) enc(varname string, t reflect.Type) {
x.line("r.EncodeStringBytes(codecSelferC_RAW" + x.xs + ", []byte(" + varname + "))")
} else if fastpathAV.index(rtid) != -1 {
g := x.newGenV(t)
- x.line("z.F." + g.MethodNamePfx("Enc", false) + "V(" + varname + ", false, e)")
+ x.line("z.F." + g.MethodNamePfx("Enc", false) + "V(" + varname + ", e)")
} else {
x.xtraSM(varname, true, t)
// x.encListFallback(varname, rtid, t)
@@ -775,7 +791,7 @@ func (x *genRunner) enc(varname string, t reflect.Type) {
// x.line("if " + varname + " == nil { \nr.EncodeNil()\n } else { ")
if fastpathAV.index(rtid) != -1 {
g := x.newGenV(t)
- x.line("z.F." + g.MethodNamePfx("Enc", false) + "V(" + varname + ", false, e)")
+ x.line("z.F." + g.MethodNamePfx("Enc", false) + "V(" + varname + ", e)")
} else {
x.xtraSM(varname, true, t)
// x.encMapFallback(varname, rtid, t)
@@ -833,55 +849,64 @@ func (x *genRunner) encStruct(varname string, rtid uintptr, t reflect.Type) {
// number of non-empty things we write out first.
// This is required as we need to pre-determine the size of the container,
// to support length-prefixing.
- x.linef("var %s [%v]bool", numfieldsvar, len(tisfi))
- x.linef("_, _, _ = %s, %s, %s", sepVarname, numfieldsvar, struct2arrvar)
+ if ti.anyOmitEmpty {
+ x.linef("var %s [%v]bool", numfieldsvar, len(tisfi))
+ x.linef("_ = %s", numfieldsvar)
+ }
+ x.linef("_, _ = %s, %s", sepVarname, struct2arrvar)
x.linef("const %s bool = %v", ti2arrayvar, ti.toArray)
- nn := 0
- for j, si := range tisfi {
- if !si.omitEmpty {
- nn++
- continue
- }
- var t2 reflect.StructField
- var omitline string
- if si.i != -1 {
- t2 = t.Field(int(si.i))
- } else {
- t2typ := t
- varname3 := varname
- for _, ix := range si.is {
- for t2typ.Kind() == reflect.Ptr {
- t2typ = t2typ.Elem()
- }
- t2 = t2typ.Field(ix)
- t2typ = t2.Type
- varname3 = varname3 + "." + t2.Name
- if t2typ.Kind() == reflect.Ptr {
- omitline += varname3 + " != nil && "
+ var nn int
+ if ti.anyOmitEmpty {
+ for j, si := range tisfi {
+ if !si.omitEmpty {
+ nn++
+ continue
+ }
+ var t2 reflect.StructField
+ var omitline string
+ {
+ t2typ := t
+ varname3 := varname
+ for ij, ix := range si.is {
+ if uint8(ij) == si.nis {
+ break
+ }
+ for t2typ.Kind() == reflect.Ptr {
+ t2typ = t2typ.Elem()
+ }
+ t2 = t2typ.Field(int(ix))
+ t2typ = t2.Type
+ varname3 = varname3 + "." + t2.Name
+ if t2typ.Kind() == reflect.Ptr {
+ omitline += varname3 + " != nil && "
+ }
}
}
+ // never check omitEmpty on a struct type, as it may contain uncomparable map/slice/etc.
+ // also, for maps/slices/arrays, check if len ! 0 (not if == zero value)
+ switch t2.Type.Kind() {
+ case reflect.Struct:
+ omitline += " true"
+ case reflect.Map, reflect.Slice, reflect.Array, reflect.Chan:
+ omitline += "len(" + varname + "." + t2.Name + ") != 0"
+ default:
+ omitline += varname + "." + t2.Name + " != " + x.genZeroValueR(t2.Type)
+ }
+ x.linef("%s[%v] = %s", numfieldsvar, j, omitline)
}
- // never check omitEmpty on a struct type, as it may contain uncomparable map/slice/etc.
- // also, for maps/slices/arrays, check if len ! 0 (not if == zero value)
- switch t2.Type.Kind() {
- case reflect.Struct:
- omitline += " true"
- case reflect.Map, reflect.Slice, reflect.Array, reflect.Chan:
- omitline += "len(" + varname + "." + t2.Name + ") != 0"
- default:
- omitline += varname + "." + t2.Name + " != " + x.genZeroValueR(t2.Type)
- }
- x.linef("%s[%v] = %s", numfieldsvar, j, omitline)
}
- x.linef("var %snn%s int", genTempVarPfx, i)
+ // x.linef("var %snn%s int", genTempVarPfx, i)
x.linef("if %s || %s {", ti2arrayvar, struct2arrvar) // if ti.toArray {
- x.line("r.EncodeArrayStart(" + strconv.FormatInt(int64(len(tisfi)), 10) + ")")
+ x.linef("r.WriteArrayStart(%d)", len(tisfi))
x.linef("} else {") // if not ti.toArray
- x.linef("%snn%s = %v", genTempVarPfx, i, nn)
- x.linef("for _, b := range %s { if b { %snn%s++ } }", numfieldsvar, genTempVarPfx, i)
- x.linef("r.EncodeMapStart(%snn%s)", genTempVarPfx, i)
- x.linef("%snn%s = %v", genTempVarPfx, i, 0)
- // x.line("r.EncodeMapStart(" + strconv.FormatInt(int64(len(tisfi)), 10) + ")")
+ if ti.anyOmitEmpty {
+ x.linef("var %snn%s = %v", genTempVarPfx, i, nn)
+ x.linef("for _, b := range %s { if b { %snn%s++ } }", numfieldsvar, genTempVarPfx, i)
+ x.linef("r.WriteMapStart(%snn%s)", genTempVarPfx, i)
+ x.linef("%snn%s = %v", genTempVarPfx, i, 0)
+ } else {
+ x.linef("r.WriteMapStart(%d)", len(tisfi))
+ }
x.line("}") // close if not StructToArray
for j, si := range tisfi {
@@ -889,17 +914,18 @@ func (x *genRunner) encStruct(varname string, rtid uintptr, t reflect.Type) {
isNilVarName := genTempVarPfx + "n" + i
var labelUsed bool
var t2 reflect.StructField
- if si.i != -1 {
- t2 = t.Field(int(si.i))
- } else {
+ {
t2typ := t
varname3 := varname
- for _, ix := range si.is {
+ for ij, ix := range si.is {
+ if uint8(ij) == si.nis {
+ break
+ }
// fmt.Printf("%%%% %v, ix: %v\n", t2typ, ix)
for t2typ.Kind() == reflect.Ptr {
t2typ = t2typ.Elem()
}
- t2 = t2typ.Field(ix)
+ t2 = t2typ.Field(int(ix))
t2typ = t2.Type
varname3 = varname3 + "." + t2.Name
if t2typ.Kind() == reflect.Ptr {
@@ -922,9 +948,10 @@ func (x *genRunner) encStruct(varname string, rtid uintptr, t reflect.Type) {
x.linef("if %s || %s {", ti2arrayvar, struct2arrvar) // if ti.toArray
if labelUsed {
- x.line("if " + isNilVarName + " { r.EncodeNil() } else { ")
+ x.linef("if %s { r.WriteArrayElem(); r.EncodeNil() } else { ", isNilVarName)
+ // x.linef("if %s { z.EncSendContainerState(codecSelfer_containerArrayElem%s); r.EncodeNil() } else { ", isNilVarName, x.xs)
}
- x.linef("z.EncSendContainerState(codecSelfer_containerArrayElem%s)", x.xs)
+ x.line("r.WriteArrayElem()") // x.linef("z.EncSendContainerState(codecSelfer_containerArrayElem%s)", x.xs)
if si.omitEmpty {
x.linef("if %s[%v] {", numfieldsvar, j)
}
@@ -943,9 +970,9 @@ func (x *genRunner) encStruct(varname string, rtid uintptr, t reflect.Type) {
if si.omitEmpty {
x.linef("if %s[%v] {", numfieldsvar, j)
}
- x.linef("z.EncSendContainerState(codecSelfer_containerMapKey%s)", x.xs)
+ x.line("r.WriteMapElemKey()") // x.linef("z.EncSendContainerState(codecSelfer_containerMapKey%s)", x.xs)
x.line("r.EncodeString(codecSelferC_UTF8" + x.xs + ", string(\"" + si.encName + "\"))")
- x.linef("z.EncSendContainerState(codecSelfer_containerMapValue%s)", x.xs)
+ x.line("r.WriteMapElemValue()") // x.linef("z.EncSendContainerState(codecSelfer_containerMapValue%s)", x.xs)
if labelUsed {
x.line("if " + isNilVarName + " { r.EncodeNil() } else { ")
x.encVar(varname+"."+t2.Name, t2.Type)
@@ -959,46 +986,54 @@ func (x *genRunner) encStruct(varname string, rtid uintptr, t reflect.Type) {
x.linef("} ") // end if/else ti.toArray
}
x.linef("if %s || %s {", ti2arrayvar, struct2arrvar) // if ti.toArray {
- x.linef("z.EncSendContainerState(codecSelfer_containerArrayEnd%s)", x.xs)
+ x.line("r.WriteArrayEnd()") // x.linef("z.EncSendContainerState(codecSelfer_containerArrayEnd%s)", x.xs)
x.line("} else {")
- x.linef("z.EncSendContainerState(codecSelfer_containerMapEnd%s)", x.xs)
+ x.line("r.WriteMapEnd()") // x.linef("z.EncSendContainerState(codecSelfer_containerMapEnd%s)", x.xs)
x.line("}")
}
func (x *genRunner) encListFallback(varname string, t reflect.Type) {
+ if t.AssignableTo(uint8SliceTyp) {
+ x.linef("r.EncodeStringBytes(codecSelferC_RAW%s, []byte(%s))", x.xs, varname)
+ return
+ }
+ if t.Kind() == reflect.Array && t.Elem().Kind() == reflect.Uint8 {
+ x.linef("r.EncodeStringBytes(codecSelferC_RAW%s, ([%v]byte(%s))[:])", x.xs, t.Len(), varname)
+ return
+ }
i := x.varsfx()
g := genTempVarPfx
- x.line("r.EncodeArrayStart(len(" + varname + "))")
+ x.line("r.WriteArrayStart(len(" + varname + "))")
if t.Kind() == reflect.Chan {
x.linef("for %si%s, %si2%s := 0, len(%s); %si%s < %si2%s; %si%s++ {", g, i, g, i, varname, g, i, g, i, g, i)
- x.linef("z.EncSendContainerState(codecSelfer_containerArrayElem%s)", x.xs)
+ x.line("r.WriteArrayElem()") // x.linef("z.EncSendContainerState(codecSelfer_containerArrayElem%s)", x.xs)
x.linef("%sv%s := <-%s", g, i, varname)
} else {
// x.linef("for %si%s, %sv%s := range %s {", genTempVarPfx, i, genTempVarPfx, i, varname)
x.linef("for _, %sv%s := range %s {", genTempVarPfx, i, varname)
- x.linef("z.EncSendContainerState(codecSelfer_containerArrayElem%s)", x.xs)
+ x.line("r.WriteArrayElem()") // x.linef("z.EncSendContainerState(codecSelfer_containerArrayElem%s)", x.xs)
}
x.encVar(genTempVarPfx+"v"+i, t.Elem())
x.line("}")
- x.linef("z.EncSendContainerState(codecSelfer_containerArrayEnd%s)", x.xs)
+ x.line("r.WriteArrayEnd()") // x.linef("z.EncSendContainerState(codecSelfer_containerArrayEnd%s)", x.xs)
}
func (x *genRunner) encMapFallback(varname string, t reflect.Type) {
// TODO: expand this to handle canonical.
i := x.varsfx()
- x.line("r.EncodeMapStart(len(" + varname + "))")
+ x.line("r.WriteMapStart(len(" + varname + "))")
x.linef("for %sk%s, %sv%s := range %s {", genTempVarPfx, i, genTempVarPfx, i, varname)
// x.line("for " + genTempVarPfx + "k" + i + ", " + genTempVarPfx + "v" + i + " := range " + varname + " {")
- x.linef("z.EncSendContainerState(codecSelfer_containerMapKey%s)", x.xs)
+ x.line("r.WriteMapElemKey()") // f("z.EncSendContainerState(codecSelfer_containerMapKey%s)", x.xs)
x.encVar(genTempVarPfx+"k"+i, t.Key())
- x.linef("z.EncSendContainerState(codecSelfer_containerMapValue%s)", x.xs)
+ x.line("r.WriteMapElemValue()") // f("z.EncSendContainerState(codecSelfer_containerMapValue%s)", x.xs)
x.encVar(genTempVarPfx+"v"+i, t.Elem())
x.line("}")
- x.linef("z.EncSendContainerState(codecSelfer_containerMapEnd%s)", x.xs)
+ x.line("r.WriteMapEnd()") // f("z.EncSendContainerState(codecSelfer_containerMapEnd%s)", x.xs)
}
-func (x *genRunner) decVar(varname string, t reflect.Type, canBeNil bool) {
+func (x *genRunner) decVar(varname, decodedNilVarname string, t reflect.Type, canBeNil bool) {
// We only encode as nil if a nillable value.
// This removes some of the wasted checks for TryDecodeAsNil.
// We need to think about this more, to see what happens if omitempty, etc
@@ -1011,7 +1046,9 @@ func (x *genRunner) decVar(varname string, t reflect.Type, canBeNil bool) {
}
if canBeNil {
x.line("if r.TryDecodeAsNil() {")
- if t.Kind() == reflect.Ptr {
+ if decodedNilVarname != "" {
+ x.line(decodedNilVarname + " = true")
+ } else if t.Kind() == reflect.Ptr {
x.line("if " + varname + " != nil { ")
// if varname is a field of a struct (has a dot in it),
@@ -1071,7 +1108,7 @@ func (x *genRunner) dec(varname string, t reflect.Type) {
// assumptions:
// - the varname is to a pointer already. No need to take address of it
// - t is always a baseType T (not a *T, etc).
- rtid := reflect.ValueOf(t).Pointer()
+ rtid := rt2id(t)
tptr := reflect.PtrTo(t)
if x.checkForSelfer(t, varname) {
if t.Implements(selferTyp) || tptr.Implements(selferTyp) {
@@ -1103,7 +1140,7 @@ func (x *genRunner) dec(varname string, t reflect.Type) {
}
// check if
- // - type is RawExt
+ // - type is Raw, RawExt
// - the type implements (Text|JSON|Binary)(Unm|M)arshal
mi := x.varsfx()
x.linef("%sm%s := z.DecBinary()", genTempVarPfx, mi)
@@ -1111,6 +1148,10 @@ func (x *genRunner) dec(varname string, t reflect.Type) {
x.line("if false {") //start if block
defer func() { x.line("}") }() //end if block
+ if t == rawTyp {
+ x.linef("} else { *%v = z.DecRaw()", varname)
+ return
+ }
if t == rawExtTyp {
x.linef("} else { r.DecodeExt(%v, 0, nil)", varname)
return
@@ -1125,7 +1166,7 @@ func (x *genRunner) dec(varname string, t reflect.Type) {
x.linef("r.DecodeBuiltin(%s, %s)", vrtid, varname)
}
// only check for extensions if the type is named, and has a packagePath.
- if genImportPath(t) != "" && t.Name() != "" {
+ if !x.nx && genImportPath(t) != "" && t.Name() != "" {
// first check if extensions are configued, before doing the interface conversion
x.linef("} else if z.HasExtensions() && z.DecExt(%s) {", varname)
}
@@ -1200,10 +1241,10 @@ func (x *genRunner) dec(varname string, t reflect.Type) {
// - if elements are primitives or Selfers, call dedicated function on each member.
// - else call Encoder.encode(XXX) on it.
if rtid == uint8SliceTypId {
- x.line("*" + varname + " = r.DecodeBytes(*(*[]byte)(" + varname + "), false, false)")
+ x.line("*" + varname + " = r.DecodeBytes(*(*[]byte)(" + varname + "), false)")
} else if fastpathAV.index(rtid) != -1 {
g := x.newGenV(t)
- x.line("z.F." + g.MethodNamePfx("Dec", false) + "X(" + varname + ", false, d)")
+ x.line("z.F." + g.MethodNamePfx("Dec", false) + "X(" + varname + ", d)")
} else {
x.xtraSM(varname, false, t)
// x.decListFallback(varname, rtid, false, t)
@@ -1215,7 +1256,7 @@ func (x *genRunner) dec(varname string, t reflect.Type) {
// - else call Encoder.encode(XXX) on it.
if fastpathAV.index(rtid) != -1 {
g := x.newGenV(t)
- x.line("z.F." + g.MethodNamePfx("Dec", false) + "X(" + varname + ", false, d)")
+ x.line("z.F." + g.MethodNamePfx("Dec", false) + "X(" + varname + ", d)")
} else {
x.xtraSM(varname, false, t)
// x.decMapFallback(varname, rtid, t)
@@ -1236,59 +1277,49 @@ func (x *genRunner) dec(varname string, t reflect.Type) {
}
func (x *genRunner) decTryAssignPrimitive(varname string, t reflect.Type) (tryAsPtr bool) {
- // We have to use the actual type name when doing a direct assignment.
- // We don't have the luxury of casting the pointer to the underlying type.
- //
- // Consequently, in the situation of a
- // type Message int32
- // var x Message
- // var i int32 = 32
- // x = i // this will bomb
- // x = Message(i) // this will work
- // *((*int32)(&x)) = i // this will work
- //
- // Consequently, we replace:
- // case reflect.Uint32: x.line(varname + " = uint32(r.DecodeUint(32))")
- // with:
- // case reflect.Uint32: x.line(varname + " = " + genTypeNamePrim(t, x.tc) + "(r.DecodeUint(32))")
+ // This should only be used for exact primitives (ie un-named types).
+ // Named types may be implementations of Selfer, Unmarshaler, etc.
+ // They should be handled by dec(...)
- xfn := func(t reflect.Type) string {
- return x.genTypeNamePrim(t)
+ if t.Name() != "" {
+ tryAsPtr = true
+ return
}
+
switch t.Kind() {
case reflect.Int:
- x.linef("%s = %s(r.DecodeInt(codecSelferBitsize%s))", varname, xfn(t), x.xs)
+ x.linef("%s = r.DecodeInt(codecSelferBitsize%s)", varname, x.xs)
case reflect.Int8:
- x.linef("%s = %s(r.DecodeInt(8))", varname, xfn(t))
+ x.linef("%s = r.DecodeInt(8)", varname)
case reflect.Int16:
- x.linef("%s = %s(r.DecodeInt(16))", varname, xfn(t))
+ x.linef("%s = r.DecodeInt(16)", varname)
case reflect.Int32:
- x.linef("%s = %s(r.DecodeInt(32))", varname, xfn(t))
+ x.linef("%s = r.DecodeInt(32)", varname)
case reflect.Int64:
- x.linef("%s = %s(r.DecodeInt(64))", varname, xfn(t))
+ x.linef("%s = r.DecodeInt(64)", varname)
case reflect.Uint:
- x.linef("%s = %s(r.DecodeUint(codecSelferBitsize%s))", varname, xfn(t), x.xs)
+ x.linef("%s = r.DecodeUint(codecSelferBitsize%s)", varname, x.xs)
case reflect.Uint8:
- x.linef("%s = %s(r.DecodeUint(8))", varname, xfn(t))
+ x.linef("%s = r.DecodeUint(8)", varname)
case reflect.Uint16:
- x.linef("%s = %s(r.DecodeUint(16))", varname, xfn(t))
+ x.linef("%s = r.DecodeUint(16)", varname)
case reflect.Uint32:
- x.linef("%s = %s(r.DecodeUint(32))", varname, xfn(t))
+ x.linef("%s = r.DecodeUint(32)", varname)
case reflect.Uint64:
- x.linef("%s = %s(r.DecodeUint(64))", varname, xfn(t))
+ x.linef("%s = r.DecodeUint(64)", varname)
case reflect.Uintptr:
- x.linef("%s = %s(r.DecodeUint(codecSelferBitsize%s))", varname, xfn(t), x.xs)
+ x.linef("%s = r.DecodeUint(codecSelferBitsize%s)", varname, x.xs)
case reflect.Float32:
- x.linef("%s = %s(r.DecodeFloat(true))", varname, xfn(t))
+ x.linef("%s = r.DecodeFloat(true)", varname)
case reflect.Float64:
- x.linef("%s = %s(r.DecodeFloat(false))", varname, xfn(t))
+ x.linef("%s = r.DecodeFloat(false)", varname)
case reflect.Bool:
- x.linef("%s = %s(r.DecodeBool())", varname, xfn(t))
+ x.linef("%s = r.DecodeBool()", varname)
case reflect.String:
- x.linef("%s = %s(r.DecodeString())", varname, xfn(t))
+ x.linef("%s = r.DecodeString()", varname)
default:
tryAsPtr = true
}
@@ -1296,6 +1327,14 @@ func (x *genRunner) decTryAssignPrimitive(varname string, t reflect.Type) (tryAs
}
func (x *genRunner) decListFallback(varname string, rtid uintptr, t reflect.Type) {
+ if t.AssignableTo(uint8SliceTyp) {
+ x.line("*" + varname + " = r.DecodeBytes(*((*[]byte)(" + varname + ")), false)")
+ return
+ }
+ if t.Kind() == reflect.Array && t.Elem().Kind() == reflect.Uint8 {
+ x.linef("r.DecodeBytes( ((*[%s]byte)(%s))[:], true)", t.Len(), varname)
+ return
+ }
type tstruc struct {
TempVar string
Rand string
@@ -1311,13 +1350,13 @@ func (x *genRunner) decListFallback(varname string, rtid uintptr, t reflect.Type
funcs := make(template.FuncMap)
funcs["decLineVar"] = func(varname string) string {
- x.decVar(varname, telem, false)
- return ""
- }
- funcs["decLine"] = func(pfx string) string {
- x.decVar(ts.TempVar+pfx+ts.Rand, reflect.PtrTo(telem), false)
+ x.decVar(varname, "", telem, false)
return ""
}
+ // funcs["decLine"] = func(pfx string) string {
+ // x.decVar(ts.TempVar+pfx+ts.Rand, "", reflect.PtrTo(telem), false)
+ // return ""
+ // }
funcs["var"] = func(s string) string {
return ts.TempVar + s + ts.Rand
}
@@ -1373,21 +1412,21 @@ func (x *genRunner) decMapFallback(varname string, rtid uintptr, t reflect.Type)
return telem.Kind() == reflect.Interface
}
funcs["decLineVarK"] = func(varname string) string {
- x.decVar(varname, tkey, false)
- return ""
- }
- funcs["decLineVar"] = func(varname string) string {
- x.decVar(varname, telem, false)
- return ""
- }
- funcs["decLineK"] = func(pfx string) string {
- x.decVar(ts.TempVar+pfx+ts.Rand, reflect.PtrTo(tkey), false)
+ x.decVar(varname, "", tkey, false)
return ""
}
- funcs["decLine"] = func(pfx string) string {
- x.decVar(ts.TempVar+pfx+ts.Rand, reflect.PtrTo(telem), false)
+ funcs["decLineVar"] = func(varname, decodedNilVarname string) string {
+ x.decVar(varname, decodedNilVarname, telem, false)
return ""
}
+ // funcs["decLineK"] = func(pfx string) string {
+ // x.decVar(ts.TempVar+pfx+ts.Rand, reflect.PtrTo(tkey), false)
+ // return ""
+ // }
+ // funcs["decLine"] = func(pfx string) string {
+ // x.decVar(ts.TempVar+pfx+ts.Rand, reflect.PtrTo(telem), false)
+ // return ""
+ // }
funcs["var"] = func(s string) string {
return ts.TempVar + s + ts.Rand
}
@@ -1408,18 +1447,19 @@ func (x *genRunner) decStructMapSwitch(kName string, varname string, rtid uintpt
for _, si := range tisfi {
x.line("case \"" + si.encName + "\":")
var t2 reflect.StructField
- if si.i != -1 {
- t2 = t.Field(int(si.i))
- } else {
- //we must accomodate anonymous fields, where the embedded field is a nil pointer in the value.
+ {
+ //we must accommodate anonymous fields, where the embedded field is a nil pointer in the value.
// t2 = t.FieldByIndex(si.is)
t2typ := t
varname3 := varname
- for _, ix := range si.is {
+ for ij, ix := range si.is {
+ if uint8(ij) == si.nis {
+ break
+ }
for t2typ.Kind() == reflect.Ptr {
t2typ = t2typ.Elem()
}
- t2 = t2typ.Field(ix)
+ t2 = t2typ.Field(int(ix))
t2typ = t2.Type
varname3 = varname3 + "." + t2.Name
if t2typ.Kind() == reflect.Ptr {
@@ -1427,7 +1467,7 @@ func (x *genRunner) decStructMapSwitch(kName string, varname string, rtid uintpt
}
}
}
- x.decVar(varname+"."+t2.Name, t2.Type, false)
+ x.decVar(varname+"."+t2.Name, "", t2.Type, false)
}
x.line("default:")
// pass the slice here, so that the string will not escape, and maybe save allocation
@@ -1440,17 +1480,6 @@ func (x *genRunner) decStructMap(varname, lenvarname string, rtid uintptr, t ref
i := x.varsfx()
kName := tpfx + "s" + i
- // We thought to use ReadStringAsBytes, as go compiler might optimize the copy out.
- // However, using that was more expensive, as it seems that the switch expression
- // is evaluated each time.
- //
- // We could depend on decodeString using a temporary/shared buffer internally.
- // However, this model of creating a byte array, and using explicitly is faster,
- // and allows optional use of unsafe []byte->string conversion without alloc.
-
- // Also, ensure that the slice array doesn't escape.
- // That will help escape analysis prevent allocation when it gets better.
-
// x.line("var " + kName + "Arr = [32]byte{} // default string to decode into")
// x.line("var " + kName + "Slc = " + kName + "Arr[:] // default slice to decode into")
// use the scratch buffer to avoid allocation (most field names are < 32).
@@ -1469,21 +1498,15 @@ func (x *genRunner) decStructMap(varname, lenvarname string, rtid uintptr, t ref
x.linef("if %shl%s { if %sj%s >= %s { break }", tpfx, i, tpfx, i, lenvarname)
x.line("} else { if r.CheckBreak() { break }; }")
}
- x.linef("z.DecSendContainerState(codecSelfer_containerMapKey%s)", x.xs)
- x.line(kName + "Slc = r.DecodeBytes(" + kName + "Slc, true, true)")
+ x.line("r.ReadMapElemKey()") // f("z.DecSendContainerState(codecSelfer_containerMapKey%s)", x.xs)
+ x.line(kName + "Slc = r.DecodeStringAsBytes()")
// let string be scoped to this loop alone, so it doesn't escape.
- if x.unsafe {
- x.line(kName + "SlcHdr := codecSelferUnsafeString" + x.xs + "{uintptr(unsafe.Pointer(&" +
- kName + "Slc[0])), len(" + kName + "Slc)}")
- x.line(kName + " := *(*string)(unsafe.Pointer(&" + kName + "SlcHdr))")
- } else {
- x.line(kName + " := string(" + kName + "Slc)")
- }
- x.linef("z.DecSendContainerState(codecSelfer_containerMapValue%s)", x.xs)
+ x.line(kName + " := string(" + kName + "Slc)")
+ x.line("r.ReadMapElemValue()") // f("z.DecSendContainerState(codecSelfer_containerMapValue%s)", x.xs)
x.decStructMapSwitch(kName, varname, rtid, t)
x.line("} // end for " + tpfx + "j" + i)
- x.linef("z.DecSendContainerState(codecSelfer_containerMapEnd%s)", x.xs)
+ x.line("r.ReadMapEnd()") // f("z.DecSendContainerState(codecSelfer_containerMapEnd%s)", x.xs)
}
func (x *genRunner) decStructArray(varname, lenvarname, breakString string, rtid uintptr, t reflect.Type) {
@@ -1496,18 +1519,19 @@ func (x *genRunner) decStructArray(varname, lenvarname, breakString string, rtid
x.linef("var %shl%s bool = %s >= 0", tpfx, i, lenvarname) // has length
for _, si := range tisfi {
var t2 reflect.StructField
- if si.i != -1 {
- t2 = t.Field(int(si.i))
- } else {
- //we must accomodate anonymous fields, where the embedded field is a nil pointer in the value.
+ {
+ //we must accommodate anonymous fields, where the embedded field is a nil pointer in the value.
// t2 = t.FieldByIndex(si.is)
t2typ := t
varname3 := varname
- for _, ix := range si.is {
+ for ij, ix := range si.is {
+ if uint8(ij) == si.nis {
+ break
+ }
for t2typ.Kind() == reflect.Ptr {
t2typ = t2typ.Elem()
}
- t2 = t2typ.Field(ix)
+ t2 = t2typ.Field(int(ix))
t2typ = t2.Type
varname3 = varname3 + "." + t2.Name
if t2typ.Kind() == reflect.Ptr {
@@ -1519,10 +1543,10 @@ func (x *genRunner) decStructArray(varname, lenvarname, breakString string, rtid
x.linef("%sj%s++; if %shl%s { %sb%s = %sj%s > %s } else { %sb%s = r.CheckBreak() }",
tpfx, i, tpfx, i, tpfx, i,
tpfx, i, lenvarname, tpfx, i)
- x.linef("if %sb%s { z.DecSendContainerState(codecSelfer_containerArrayEnd%s); %s }",
- tpfx, i, x.xs, breakString)
- x.linef("z.DecSendContainerState(codecSelfer_containerArrayElem%s)", x.xs)
- x.decVar(varname+"."+t2.Name, t2.Type, true)
+ x.linef("if %sb%s { r.ReadArrayEnd(); %s }", tpfx, i, breakString)
+ // x.linef("if %sb%s { z.DecSendContainerState(codecSelfer_containerArrayEnd%s); %s }", tpfx, i, x.xs, breakString)
+ x.line("r.ReadArrayElem()") // f("z.DecSendContainerState(codecSelfer_containerArrayElem%s)", x.xs)
+ x.decVar(varname+"."+t2.Name, "", t2.Type, true)
}
// read remaining values and throw away.
x.line("for {")
@@ -1530,10 +1554,10 @@ func (x *genRunner) decStructArray(varname, lenvarname, breakString string, rtid
tpfx, i, tpfx, i, tpfx, i,
tpfx, i, lenvarname, tpfx, i)
x.linef("if %sb%s { break }", tpfx, i)
- x.linef("z.DecSendContainerState(codecSelfer_containerArrayElem%s)", x.xs)
+ x.line("r.ReadArrayElem()") // f("z.DecSendContainerState(codecSelfer_containerArrayElem%s)", x.xs)
x.linef(`z.DecStructFieldNotFound(%sj%s - 1, "")`, tpfx, i)
x.line("}")
- x.linef("z.DecSendContainerState(codecSelfer_containerArrayEnd%s)", x.xs)
+ x.line("r.ReadArrayEnd()") // f("z.DecSendContainerState(codecSelfer_containerArrayEnd%s)", x.xs)
}
func (x *genRunner) decStruct(varname string, rtid uintptr, t reflect.Type) {
@@ -1543,7 +1567,7 @@ func (x *genRunner) decStruct(varname string, rtid uintptr, t reflect.Type) {
x.linef("if %sct%s == codecSelferValueTypeMap%s {", genTempVarPfx, i, x.xs)
x.line(genTempVarPfx + "l" + i + " := r.ReadMapStart()")
x.linef("if %sl%s == 0 {", genTempVarPfx, i)
- x.linef("z.DecSendContainerState(codecSelfer_containerMapEnd%s)", x.xs)
+ x.line("r.ReadMapEnd()") // f("z.DecSendContainerState(codecSelfer_containerMapEnd%s)", x.xs)
if genUseOneFunctionForDecStructMap {
x.line("} else { ")
x.linef("x.codecDecodeSelfFromMap(%sl%s, d)", genTempVarPfx, i)
@@ -1559,7 +1583,7 @@ func (x *genRunner) decStruct(varname string, rtid uintptr, t reflect.Type) {
x.linef("} else if %sct%s == codecSelferValueTypeArray%s {", genTempVarPfx, i, x.xs)
x.line(genTempVarPfx + "l" + i + " := r.ReadArrayStart()")
x.linef("if %sl%s == 0 {", genTempVarPfx, i)
- x.linef("z.DecSendContainerState(codecSelfer_containerArrayEnd%s)", x.xs)
+ x.line("r.ReadArrayEnd()") // f("z.DecSendContainerState(codecSelfer_containerArrayEnd%s)", x.xs)
x.line("} else { ")
x.linef("x.codecDecodeSelfFromArray(%sl%s, d)", genTempVarPfx, i)
x.line("}")
@@ -1616,8 +1640,6 @@ func (x *genV) MethodNamePfx(prefix string, prim bool) string {
}
-var genCheckVendor = os.Getenv("GO15VENDOREXPERIMENT") == "1"
-
// genImportPath returns import path of a non-predeclared named typed, or an empty string otherwise.
//
// This handles the misbehaviour that occurs when 1.5-style vendoring is enabled,
@@ -1626,19 +1648,32 @@ var genCheckVendor = os.Getenv("GO15VENDOREXPERIMENT") == "1"
func genImportPath(t reflect.Type) (s string) {
s = t.PkgPath()
if genCheckVendor {
- // HACK: Misbehaviour occurs in go 1.5. May have to re-visit this later.
- // if s contains /vendor/ OR startsWith vendor/, then return everything after it.
- const vendorStart = "vendor/"
- const vendorInline = "/vendor/"
- if i := strings.LastIndex(s, vendorInline); i >= 0 {
- s = s[i+len(vendorInline):]
- } else if strings.HasPrefix(s, vendorStart) {
- s = s[len(vendorStart):]
- }
+ // HACK: always handle vendoring. It should be typically on in go 1.6, 1.7
+ s = stripVendor(s)
}
return
}
+// A go identifier is (letter|_)[letter|number|_]*
+func genGoIdentifier(s string, checkFirstChar bool) string {
+ b := make([]byte, 0, len(s))
+ t := make([]byte, 4)
+ var n int
+ for i, r := range s {
+ if checkFirstChar && i == 0 && !unicode.IsLetter(r) {
+ b = append(b, '_')
+ }
+ // r must be unicode_letter, unicode_digit or _
+ if unicode.IsLetter(r) || unicode.IsDigit(r) {
+ n = utf8.EncodeRune(t, r)
+ b = append(b, t[:n]...)
+ } else {
+ b = append(b, '_')
+ }
+ }
+ return string(b)
+}
+
func genNonPtr(t reflect.Type) reflect.Type {
for t.Kind() == reflect.Ptr {
t = t.Elem()
@@ -1648,7 +1683,7 @@ func genNonPtr(t reflect.Type) reflect.Type {
func genTitleCaseName(s string) string {
switch s {
- case "interface{}":
+ case "interface{}", "interface {}":
return "Intf"
default:
return strings.ToUpper(s[0:1]) + s[1:]
@@ -1736,8 +1771,8 @@ func genIsImmutable(t reflect.Type) (v bool) {
}
type genInternal struct {
- Values []genV
- Unsafe bool
+ Version int
+ Values []genV
}
func (x genInternal) FastpathLen() (l int) {
@@ -1751,7 +1786,7 @@ func (x genInternal) FastpathLen() (l int) {
func genInternalZeroValue(s string) string {
switch s {
- case "interface{}":
+ case "interface{}", "interface {}":
return "nil"
case "bool":
return "false"
@@ -1837,8 +1872,21 @@ func genInternalSortType(s string, elem bool) string {
panic("sorttype: unexpected type: " + s)
}
+func stripVendor(s string) string {
+ // HACK: Misbehaviour occurs in go 1.5. May have to re-visit this later.
+ // if s contains /vendor/ OR startsWith vendor/, then return everything after it.
+ const vendorStart = "vendor/"
+ const vendorInline = "/vendor/"
+ if i := strings.LastIndex(s, vendorInline); i >= 0 {
+ s = s[i+len(vendorInline):]
+ } else if strings.HasPrefix(s, vendorStart) {
+ s = s[len(vendorStart):]
+ }
+ return s
+}
+
// var genInternalMu sync.Mutex
-var genInternalV genInternal
+var genInternalV = genInternal{Version: genVersion}
var genInternalTmplFuncs template.FuncMap
var genInternalOnce sync.Once
@@ -1901,9 +1949,9 @@ func genInternalInit() {
"float64": 8,
"bool": 1,
}
- var gt genInternal
+ var gt = genInternal{Version: genVersion}
- // For each slice or map type, there must be a (symetrical) Encode and Decode fast-path function
+ // For each slice or map type, there must be a (symmetrical) Encode and Decode fast-path function
for _, s := range types {
gt.Values = append(gt.Values, genV{Primitive: s, Size: mapvaltypes2[s]})
if s != "uint8" { // do not generate fast path for slice of bytes. Treat specially already.
@@ -1933,11 +1981,10 @@ func genInternalInit() {
// It is run by the program author alone.
// Unfortunately, it has to be exported so that it can be called from a command line tool.
// *** DO NOT USE ***
-func genInternalGoFile(r io.Reader, w io.Writer, safe bool) (err error) {
+func genInternalGoFile(r io.Reader, w io.Writer) (err error) {
genInternalOnce.Do(genInternalInit)
gt := genInternalV
- gt.Unsafe = !safe
t := template.New("").Funcs(genInternalTmplFuncs)
diff --git a/codec/goversion_arrayof_gte_go15.go b/codec/goversion_arrayof_gte_go15.go
new file mode 100644
index 0000000..7567e2c
--- /dev/null
+++ b/codec/goversion_arrayof_gte_go15.go
@@ -0,0 +1,14 @@
+// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+// +build go1.5
+
+package codec
+
+import "reflect"
+
+const reflectArrayOfSupported = true
+
+func reflectArrayOf(count int, elem reflect.Type) reflect.Type {
+ return reflect.ArrayOf(count, elem)
+}
diff --git a/codec/goversion_arrayof_lt_go15.go b/codec/goversion_arrayof_lt_go15.go
new file mode 100644
index 0000000..ec94bd0
--- /dev/null
+++ b/codec/goversion_arrayof_lt_go15.go
@@ -0,0 +1,14 @@
+// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+// +build !go1.5
+
+package codec
+
+import "reflect"
+
+const reflectArrayOfSupported = false
+
+func reflectArrayOf(count int, elem reflect.Type) reflect.Type {
+ panic("codec: reflect.ArrayOf unsupported in this go version")
+}
diff --git a/codec/goversion_makemap_gte_go19.go b/codec/goversion_makemap_gte_go19.go
new file mode 100644
index 0000000..51fe40e
--- /dev/null
+++ b/codec/goversion_makemap_gte_go19.go
@@ -0,0 +1,15 @@
+// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+// +build go1.9
+
+package codec
+
+import "reflect"
+
+func makeMapReflect(t reflect.Type, size int) reflect.Value {
+ if size < 0 {
+ return reflect.MakeMapWithSize(t, 4)
+ }
+ return reflect.MakeMapWithSize(t, size)
+}
diff --git a/codec/goversion_makemap_lt_go19.go b/codec/goversion_makemap_lt_go19.go
new file mode 100644
index 0000000..d4b9c2c
--- /dev/null
+++ b/codec/goversion_makemap_lt_go19.go
@@ -0,0 +1,12 @@
+// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+// +build !go1.9
+
+package codec
+
+import "reflect"
+
+func makeMapReflect(t reflect.Type, size int) reflect.Value {
+ return reflect.MakeMap(t)
+}
diff --git a/codec/goversion_unsupported_lt_go14.go b/codec/goversion_unsupported_lt_go14.go
new file mode 100644
index 0000000..dcd8c3d
--- /dev/null
+++ b/codec/goversion_unsupported_lt_go14.go
@@ -0,0 +1,17 @@
+// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+// +build !go1.4
+
+package codec
+
+// This codec package will only work for go1.4 and above.
+// This is for the following reasons:
+// - go 1.4 was released in 2014
+// - go runtime is written fully in go
+// - interface only holds pointers
+// - reflect.Value is stabilized as 3 words
+
+func init() {
+ panic("codec: go 1.3 and below are not supported")
+}
diff --git a/codec/goversion_vendor_eq_go15.go b/codec/goversion_vendor_eq_go15.go
new file mode 100644
index 0000000..68626e1
--- /dev/null
+++ b/codec/goversion_vendor_eq_go15.go
@@ -0,0 +1,10 @@
+// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+// +build go1.5,!go1.6
+
+package codec
+
+import "os"
+
+var genCheckVendor = os.Getenv("GO15VENDOREXPERIMENT") == "1"
diff --git a/codec/goversion_vendor_eq_go16.go b/codec/goversion_vendor_eq_go16.go
new file mode 100644
index 0000000..344f596
--- /dev/null
+++ b/codec/goversion_vendor_eq_go16.go
@@ -0,0 +1,10 @@
+// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+// +build go1.6,!go1.7
+
+package codec
+
+import "os"
+
+var genCheckVendor = os.Getenv("GO15VENDOREXPERIMENT") != "0"
diff --git a/codec/goversion_vendor_gte_go17.go b/codec/goversion_vendor_gte_go17.go
new file mode 100644
index 0000000..de91d29
--- /dev/null
+++ b/codec/goversion_vendor_gte_go17.go
@@ -0,0 +1,8 @@
+// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+// +build go1.7
+
+package codec
+
+const genCheckVendor = true
diff --git a/codec/goversion_vendor_lt_go15.go b/codec/goversion_vendor_lt_go15.go
new file mode 100644
index 0000000..9d007bf
--- /dev/null
+++ b/codec/goversion_vendor_lt_go15.go
@@ -0,0 +1,8 @@
+// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+// +build !go1.5
+
+package codec
+
+var genCheckVendor = false
diff --git a/codec/helper.go b/codec/helper.go
index 40065a0..b846df0 100644
--- a/codec/helper.go
+++ b/codec/helper.go
@@ -38,10 +38,6 @@ package codec
// a length prefix, or if it used explicit breaks. If length-prefixed, we assume that
// it has to be binary, and we do not even try to read separators.
//
-// The only codec that may suffer (slightly) is cbor, and only when decoding indefinite-length.
-// It may suffer because we treat it like a text-based codec, and read separators.
-// However, this read is a no-op and the cost is insignificant.
-//
// Philosophy
// ------------
// On decode, this codec will update containers appropriately:
@@ -107,8 +103,10 @@ import (
"errors"
"fmt"
"math"
+ "os"
"reflect"
"sort"
+ "strconv"
"strings"
"sync"
"time"
@@ -116,43 +114,56 @@ import (
const (
scratchByteArrayLen = 32
- initCollectionCap = 32 // 32 is defensive. 16 is preferred.
+ // initCollectionCap = 16 // 32 is defensive. 16 is preferred.
// Support encoding.(Binary|Text)(Unm|M)arshaler.
// This constant flag will enable or disable it.
supportMarshalInterfaces = true
- // Each Encoder or Decoder uses a cache of functions based on conditionals,
- // so that the conditionals are not run every time.
- //
- // Either a map or a slice is used to keep track of the functions.
- // The map is more natural, but has a higher cost than a slice/array.
- // This flag (useMapForCodecCache) controls which is used.
- //
- // From benchmarks, slices with linear search perform better with < 32 entries.
- // We have typically seen a high threshold of about 24 entries.
- useMapForCodecCache = false
-
// for debugging, set this to false, to catch panic traces.
// Note that this will always cause rpc tests to fail, since they need io.EOF sent via panic.
recoverPanicToErr = true
- // Fast path functions try to create a fast path encode or decode implementation
- // for common maps and slices, by by-passing reflection altogether.
- fastpathEnabled = true
+ // arrayCacheLen is the length of the cache used in encoder or decoder for
+ // allowing zero-alloc initialization.
+ arrayCacheLen = 8
- // if checkStructForEmptyValue, check structs fields to see if an empty value.
- // This could be an expensive call, so possibly disable it.
- checkStructForEmptyValue = false
+ // We tried an optimization, where we detect if a type is one of the known types
+ // we optimized for (e.g. int, []uint64, etc).
+ //
+ // However, we notice some worse performance when using this optimization.
+ // So we hide it behind a flag, to turn on if needed.
+ useLookupRecognizedTypes = false
- // if derefForIsEmptyValue, deref pointers and interfaces when checking isEmptyValue
- derefForIsEmptyValue = false
+ // using recognized allows us to do d.decode(interface{}) instead of d.decodeValue(reflect.Value)
+ // when we can infer that the kind of the interface{} is one of the ones hard-coded in the
+ // type switch for known types or the ones defined by fast-path.
+ //
+ // However, it seems we get better performance when we don't recognize, and just let
+ // reflection handle it.
+ //
+ // Reasoning is as below:
+ // typeswitch is a binary search with a branch to a code-point.
+ // getdecfn is a binary search with a call to a function pointer.
+ //
+ // both are about the same.
+ //
+ // so: why prefer typeswitch?
+ //
+ // is recognized does the following:
+ // - lookup rtid
+ // - check if in sorted list
+ // - calls decode(type switch)
+ // - 1 or 2 binary search to a point in code
+ // - branch there
+ //
+ // vs getdecfn
+ // - lookup rtid
+ // - check in sorted list for a function pointer
+ // - calls it to decode using reflection (optimized)
- // if resetSliceElemToZeroValue, then on decoding a slice, reset the element to a zero value first.
- // Only concern is that, if the slice already contained some garbage, we will decode into that garbage.
- // The chances of this are slim, so leave this "optimization".
- // TODO: should this be true, to ensure that we always decode into a "zero" "empty" value?
- resetSliceElemToZeroValue bool = false
+ // always set xDebug = false before releasing software
+ xDebug = true
)
var (
@@ -160,6 +171,20 @@ var (
zeroByteSlice = oneByteArr[:0:0]
)
+var pool pooler
+
+func init() {
+ pool.init()
+}
+
+// type findCodecFnMode uint8
+
+// const (
+// findCodecFnModeMap findCodecFnMode = iota
+// findCodecFnModeBinarySearch
+// findCodecFnModeLinearSearch
+// )
+
type charEncoding uint8
const (
@@ -192,6 +217,36 @@ const (
// valueTypeInvalid = 0xff
)
+func (x valueType) String() string {
+ switch x {
+ case valueTypeNil:
+ return "Nil"
+ case valueTypeInt:
+ return "Int"
+ case valueTypeUint:
+ return "Uint"
+ case valueTypeFloat:
+ return "Float"
+ case valueTypeBool:
+ return "Bool"
+ case valueTypeString:
+ return "String"
+ case valueTypeSymbol:
+ return "Symbol"
+ case valueTypeBytes:
+ return "Bytes"
+ case valueTypeMap:
+ return "Map"
+ case valueTypeArray:
+ return "Array"
+ case valueTypeTimestamp:
+ return "Timestamp"
+ case valueTypeExt:
+ return "Ext"
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+
type seqType uint8
const (
@@ -217,28 +272,41 @@ const (
containerArrayEnd
)
-type rgetPoolT struct {
- encNames [8]string
- fNames [8]string
- etypes [8]uintptr
- sfis [8]*structFieldInfo
+// sfiIdx used for tracking where a (field/enc)Name is seen in a []*structFieldInfo
+type sfiIdx struct {
+ name string
+ index int
}
-var rgetPool = sync.Pool{
- New: func() interface{} { return new(rgetPoolT) },
-}
+// do not recurse if a containing type refers to an embedded type
+// which refers back to its containing type (via a pointer).
+// The second time this back-reference happens, break out,
+// so as not to cause an infinite loop.
+const rgetMaxRecursion = 2
+
+// Anecdotally, we believe most types have <= 12 fields.
+// Java's PMD rules set TooManyFields threshold to 15.
+const typeInfoLoadArrayLen = 12
-type rgetT struct {
+type typeInfoLoad struct {
fNames []string
encNames []string
etypes []uintptr
sfis []*structFieldInfo
}
-type containerStateRecv interface {
- sendContainerState(containerState)
+type typeInfoLoadArray struct {
+ fNames [typeInfoLoadArrayLen]string
+ encNames [typeInfoLoadArrayLen]string
+ etypes [typeInfoLoadArrayLen]uintptr
+ sfis [typeInfoLoadArrayLen]*structFieldInfo
+ sfiidx [typeInfoLoadArrayLen]sfiIdx
}
+// type containerStateRecv interface {
+// sendContainerState(containerState)
+// }
+
// mirror json.Marshaler and json.Unmarshaler here,
// so we don't import the encoding/json package
type jsonMarshaler interface {
@@ -248,6 +316,8 @@ type jsonUnmarshaler interface {
UnmarshalJSON([]byte) error
}
+// type byteAccepter func(byte) bool
+
var (
bigen = binary.BigEndian
structInfoFieldName = "_struct"
@@ -260,6 +330,7 @@ var (
stringTyp = reflect.TypeOf("")
timeTyp = reflect.TypeOf(time.Time{})
rawExtTyp = reflect.TypeOf(RawExt{})
+ rawTyp = reflect.TypeOf(Raw{})
uint8SliceTyp = reflect.TypeOf([]uint8(nil))
mapBySliceTyp = reflect.TypeOf((*MapBySlice)(nil)).Elem()
@@ -275,16 +346,17 @@ var (
selferTyp = reflect.TypeOf((*Selfer)(nil)).Elem()
- uint8SliceTypId = reflect.ValueOf(uint8SliceTyp).Pointer()
- rawExtTypId = reflect.ValueOf(rawExtTyp).Pointer()
- intfTypId = reflect.ValueOf(intfTyp).Pointer()
- timeTypId = reflect.ValueOf(timeTyp).Pointer()
- stringTypId = reflect.ValueOf(stringTyp).Pointer()
+ uint8SliceTypId = rt2id(uint8SliceTyp)
+ rawExtTypId = rt2id(rawExtTyp)
+ rawTypId = rt2id(rawTyp)
+ intfTypId = rt2id(intfTyp)
+ timeTypId = rt2id(timeTyp)
+ stringTypId = rt2id(stringTyp)
- mapStrIntfTypId = reflect.ValueOf(mapStrIntfTyp).Pointer()
- mapIntfIntfTypId = reflect.ValueOf(mapIntfIntfTyp).Pointer()
- intfSliceTypId = reflect.ValueOf(intfSliceTyp).Pointer()
- // mapBySliceTypId = reflect.ValueOf(mapBySliceTyp).Pointer()
+ mapStrIntfTypId = rt2id(mapStrIntfTyp)
+ mapIntfIntfTypId = rt2id(mapIntfIntfTyp)
+ intfSliceTypId = rt2id(intfSliceTyp)
+ // mapBySliceTypId = rt2id(mapBySliceTyp)
intBitsize uint8 = uint8(reflect.TypeOf(int(0)).Bits())
uintBitsize uint8 = uint8(reflect.TypeOf(uint(0)).Bits())
@@ -299,6 +371,99 @@ var (
var defTypeInfos = NewTypeInfos([]string{"codec", "json"})
+var immutableKindsSet = [32]bool{
+ // reflect.Invalid: ,
+ reflect.Bool: true,
+ reflect.Int: true,
+ reflect.Int8: true,
+ reflect.Int16: true,
+ reflect.Int32: true,
+ reflect.Int64: true,
+ reflect.Uint: true,
+ reflect.Uint8: true,
+ reflect.Uint16: true,
+ reflect.Uint32: true,
+ reflect.Uint64: true,
+ reflect.Uintptr: true,
+ reflect.Float32: true,
+ reflect.Float64: true,
+ reflect.Complex64: true,
+ reflect.Complex128: true,
+ // reflect.Array
+ // reflect.Chan
+ // reflect.Func: true,
+ // reflect.Interface
+ // reflect.Map
+ // reflect.Ptr
+ // reflect.Slice
+ reflect.String: true,
+ // reflect.Struct
+ // reflect.UnsafePointer
+}
+
+var recognizedRtids []uintptr
+var recognizedRtidPtrs []uintptr
+var recognizedRtidOrPtrs []uintptr
+
+func init() {
+ if !useLookupRecognizedTypes {
+ return
+ }
+ for _, v := range [...]interface{}{
+ float32(0),
+ float64(0),
+ uintptr(0),
+ uint(0),
+ uint8(0),
+ uint16(0),
+ uint32(0),
+ uint64(0),
+ uintptr(0),
+ int(0),
+ int8(0),
+ int16(0),
+ int32(0),
+ int64(0),
+ bool(false),
+ string(""),
+ Raw{},
+ []byte(nil),
+ } {
+ rt := reflect.TypeOf(v)
+ recognizedRtids = append(recognizedRtids, rt2id(rt))
+ recognizedRtidPtrs = append(recognizedRtidPtrs, rt2id(reflect.PtrTo(rt)))
+ }
+}
+
+func containsU(s []uintptr, v uintptr) bool {
+ // return false // TODO: REMOVE
+ h, i, j := 0, 0, len(s)
+ for i < j {
+ h = i + (j-i)/2
+ if s[h] < v {
+ i = h + 1
+ } else {
+ j = h
+ }
+ }
+ if i < len(s) && s[i] == v {
+ return true
+ }
+ return false
+}
+
+func isRecognizedRtid(rtid uintptr) bool {
+ return containsU(recognizedRtids, rtid)
+}
+
+func isRecognizedRtidPtr(rtid uintptr) bool {
+ return containsU(recognizedRtidPtrs, rtid)
+}
+
+func isRecognizedRtidOrPtr(rtid uintptr) bool {
+ return containsU(recognizedRtidOrPtrs, rtid)
+}
+
// Selfer defines methods by which a value can encode or decode itself.
//
// Any type which implements Selfer will be able to encode or decode itself.
@@ -332,6 +497,7 @@ type BasicHandle struct {
extHandle
EncodeOptions
DecodeOptions
+ noBuiltInTypeChecker
}
func (x *BasicHandle) getBasicHandle() *BasicHandle {
@@ -339,10 +505,10 @@ func (x *BasicHandle) getBasicHandle() *BasicHandle {
}
func (x *BasicHandle) getTypeInfo(rtid uintptr, rt reflect.Type) (pti *typeInfo) {
- if x.TypeInfos != nil {
- return x.TypeInfos.get(rtid, rt)
+ if x.TypeInfos == nil {
+ return defTypeInfos.get(rtid, rt)
}
- return defTypeInfos.get(rtid, rt)
+ return x.TypeInfos.get(rtid, rt)
}
// Handle is the interface for a specific encoding format.
@@ -355,8 +521,15 @@ type Handle interface {
newEncDriver(w *Encoder) encDriver
newDecDriver(r *Decoder) decDriver
isBinary() bool
+ hasElemSeparators() bool
+ IsBuiltinType(rtid uintptr) bool
}
+// Raw represents raw formatted bytes.
+// We "blindly" store it during encode and store the raw bytes during decode.
+// Note: it is dangerous during encode, so we may gate the behaviour behind an Encode flag which must be explicitly set.
+type Raw []byte
+
// RawExt represents raw unprocessed extension data.
// Some codecs will decode extension data as a *RawExt if there is no registered extension for the tag.
//
@@ -367,7 +540,7 @@ type RawExt struct {
// Data is used by codecs (e.g. binc, msgpack, simple) which do custom serialization of the types
Data []byte
// Value represents the extension, if Data is nil.
- // Value is used by codecs (e.g. cbor) which use the format to do custom serialization of the types.
+ // Value is used by codecs (e.g. cbor, json) which use the format to do custom serialization of the types.
Value interface{}
}
@@ -467,9 +640,6 @@ func (x *setExtWrapper) UpdateExt(dest interface{}, v interface{}) {
x.i.UpdateExt(dest, v)
}
-// type errorString string
-// func (x errorString) Error() string { return string(x) }
-
type binaryEncodingType struct{}
func (_ binaryEncodingType) isBinary() bool { return true }
@@ -480,15 +650,23 @@ func (_ textEncodingType) isBinary() bool { return false }
// noBuiltInTypes is embedded into many types which do not support builtins
// e.g. msgpack, simple, cbor.
-type noBuiltInTypes struct{}
-func (_ noBuiltInTypes) IsBuiltinType(rt uintptr) bool { return false }
+type noBuiltInTypeChecker struct{}
+
+func (_ noBuiltInTypeChecker) IsBuiltinType(rt uintptr) bool { return false }
+
+type noBuiltInTypes struct{ noBuiltInTypeChecker }
+
func (_ noBuiltInTypes) EncodeBuiltin(rt uintptr, v interface{}) {}
func (_ noBuiltInTypes) DecodeBuiltin(rt uintptr, v interface{}) {}
-type noStreamingCodec struct{}
+// type noStreamingCodec struct{}
+// func (_ noStreamingCodec) CheckBreak() bool { return false }
+// func (_ noStreamingCodec) hasElemSeparators() bool { return false }
+
+type noElemSeparators struct{}
-func (_ noStreamingCodec) CheckBreak() bool { return false }
+func (_ noElemSeparators) hasElemSeparators() (v bool) { return }
// bigenHelper.
// Users must already slice the x completely, because we will not reslice.
@@ -545,12 +723,12 @@ func (o *extHandle) AddExt(
func (o *extHandle) SetExt(rt reflect.Type, tag uint64, ext Ext) (err error) {
// o is a pointer, because we may need to initialize it
if rt.PkgPath() == "" || rt.Kind() == reflect.Interface {
- err = fmt.Errorf("codec.Handle.AddExt: Takes named type, especially not a pointer or interface: %T",
+ err = fmt.Errorf("codec.Handle.AddExt: Takes named type, not a pointer or interface: %T",
reflect.Zero(rt).Interface())
return
}
- rtid := reflect.ValueOf(rt).Pointer()
+ rtid := rt2id(rt)
for _, v := range *o {
if v.rtid == rtid {
v.tag, v.ext = tag, ext
@@ -587,63 +765,44 @@ func (o extHandle) getExtForTag(tag uint64) *extTypeTagFn {
return nil
}
-type structFieldInfo struct {
- encName string // encode name
+const maxLevelsEmbedding = 16
- // only one of 'i' or 'is' can be set. If 'i' is -1, then 'is' has been set.
+type structFieldInfo struct {
+ encName string // encode name
+ fieldName string // field name
- is []int // (recursive/embedded) field index in struct
- i int16 // field index in struct
+ is [maxLevelsEmbedding]uint16 // (recursive/embedded) field index in struct
+ nis uint8 // num levels of embedding. if 1, then it's not embedded.
omitEmpty bool
toArray bool // if field is _struct, is the toArray set?
}
-// func (si *structFieldInfo) isZero() bool {
-// return si.encName == "" && len(si.is) == 0 && si.i == 0 && !si.omitEmpty && !si.toArray
-// }
+func (si *structFieldInfo) setToZeroValue(v reflect.Value) {
+ if v, valid := si.field(v, false); valid {
+ v.Set(reflect.Zero(v.Type()))
+ }
+}
// rv returns the field of the struct.
// If anonymous, it returns an Invalid
-func (si *structFieldInfo) field(v reflect.Value, update bool) (rv2 reflect.Value) {
- if si.i != -1 {
- v = v.Field(int(si.i))
- return v
- }
+func (si *structFieldInfo) field(v reflect.Value, update bool) (rv2 reflect.Value, valid bool) {
// replicate FieldByIndex
- for _, x := range si.is {
- for v.Kind() == reflect.Ptr {
- if v.IsNil() {
- if !update {
- return
- }
- v.Set(reflect.New(v.Type().Elem()))
- }
- v = v.Elem()
+ for i, x := range si.is {
+ if uint8(i) == si.nis {
+ break
+ }
+ if v, valid = baseStructRv(v, update); !valid {
+ return
}
- v = v.Field(x)
+ v = v.Field(int(x))
}
- return v
+
+ return v, true
}
-func (si *structFieldInfo) setToZeroValue(v reflect.Value) {
- if si.i != -1 {
- v = v.Field(int(si.i))
- v.Set(reflect.Zero(v.Type()))
- // v.Set(reflect.New(v.Type()).Elem())
- // v.Set(reflect.New(v.Type()))
- } else {
- // replicate FieldByIndex
- for _, x := range si.is {
- for v.Kind() == reflect.Ptr {
- if v.IsNil() {
- return
- }
- v = v.Elem()
- }
- v = v.Field(x)
- }
- v.Set(reflect.Zero(v.Type()))
- }
+func (si *structFieldInfo) fieldval(v reflect.Value, update bool) reflect.Value {
+ v, _ = si.field(v, update)
+ return v
}
func parseStructFieldInfo(fname string, stag string) *structFieldInfo {
@@ -687,6 +846,97 @@ func (p sfiSortedByEncName) Swap(i, j int) {
p[i], p[j] = p[j], p[i]
}
+const structFieldNodeNumToCache = 4
+
+type structFieldNodeCache struct {
+ rv [structFieldNodeNumToCache]reflect.Value
+ idx [structFieldNodeNumToCache]uint32
+ num uint8
+}
+
+func (x *structFieldNodeCache) get(key uint32) (fv reflect.Value, valid bool) {
+ // defer func() { fmt.Printf(">>>> found in cache2? %v\n", valid) }()
+ for i, k := range &x.idx {
+ if uint8(i) == x.num {
+ return // break
+ }
+ if key == k {
+ return x.rv[i], true
+ }
+ }
+ return
+}
+
+func (x *structFieldNodeCache) tryAdd(fv reflect.Value, key uint32) {
+ if x.num < structFieldNodeNumToCache {
+ x.rv[x.num] = fv
+ x.idx[x.num] = key
+ x.num++
+ return
+ }
+}
+
+type structFieldNode struct {
+ v reflect.Value
+ cache2 structFieldNodeCache
+ cache3 structFieldNodeCache
+ update bool
+}
+
+func (x *structFieldNode) field(si *structFieldInfo) (fv reflect.Value) {
+ // return si.fieldval(x.v, x.update)
+ // Note: we only cache if nis=2 or nis=3 i.e. up to 2 levels of embedding
+ // This mostly saves us time on the repeated calls to v.Elem, v.Field, etc.
+ var valid bool
+ switch si.nis {
+ case 1:
+ fv = x.v.Field(int(si.is[0]))
+ case 2:
+ if fv, valid = x.cache2.get(uint32(si.is[0])); valid {
+ fv = fv.Field(int(si.is[1]))
+ return
+ }
+ fv = x.v.Field(int(si.is[0]))
+ if fv, valid = baseStructRv(fv, x.update); !valid {
+ return
+ }
+ x.cache2.tryAdd(fv, uint32(si.is[0]))
+ fv = fv.Field(int(si.is[1]))
+ case 3:
+ var key uint32 = uint32(si.is[0])<<16 | uint32(si.is[1])
+ if fv, valid = x.cache3.get(key); valid {
+ fv = fv.Field(int(si.is[2]))
+ return
+ }
+ fv = x.v.Field(int(si.is[0]))
+ if fv, valid = baseStructRv(fv, x.update); !valid {
+ return
+ }
+ fv = fv.Field(int(si.is[1]))
+ if fv, valid = baseStructRv(fv, x.update); !valid {
+ return
+ }
+ x.cache3.tryAdd(fv, key)
+ fv = fv.Field(int(si.is[2]))
+ default:
+ fv, _ = si.field(x.v, x.update)
+ }
+ return
+}
+
+func baseStructRv(v reflect.Value, update bool) (v2 reflect.Value, valid bool) {
+ for v.Kind() == reflect.Ptr {
+ if v.IsNil() {
+ if !update {
+ return
+ }
+ v.Set(reflect.New(v.Type().Elem()))
+ }
+ v = v.Elem()
+ }
+ return v, true
+}
+
// typeInfo keeps information about each type referenced in the encode/decode sequence.
//
// During an encode/decode sequence, we work as below:
@@ -701,6 +951,7 @@ type typeInfo struct {
rt reflect.Type
rtid uintptr
+ // rv0 reflect.Value // saved zero value, used if immutableKind
numMeth uint16 // number of methods
@@ -710,6 +961,8 @@ type typeInfo struct {
baseId uintptr
baseIndir int8 // number of indirections to get to base
+ anyOmitEmpty bool
+
mbs bool // base type (T or *T) is a MapBySlice
bm bool // base type (T or *T) is a binaryMarshaler
@@ -733,41 +986,51 @@ type typeInfo struct {
toArray bool // whether this (struct) type should be encoded as an array
}
+// define length beyond which we do a binary search instead of a linear search.
+// From our testing, linear search seems faster than binary search up to 16-field structs.
+// However, we set to 8 similar to what python does for hashtables.
+const indexForEncNameBinarySearchThreshold = 8
+
func (ti *typeInfo) indexForEncName(name string) int {
+ // NOTE: name may be a stringView, so don't pass it to another function.
//tisfi := ti.sfi
- const binarySearchThreshold = 16
- if sfilen := len(ti.sfi); sfilen < binarySearchThreshold {
- // linear search. faster than binary search in my testing up to 16-field structs.
+ sfilen := len(ti.sfi)
+ if sfilen < indexForEncNameBinarySearchThreshold {
for i, si := range ti.sfi {
if si.encName == name {
return i
}
}
- } else {
- // binary search. adapted from sort/search.go.
- h, i, j := 0, 0, sfilen
- for i < j {
- h = i + (j-i)/2
- if ti.sfi[h].encName < name {
- i = h + 1
- } else {
- j = h
- }
- }
- if i < sfilen && ti.sfi[i].encName == name {
- return i
+ return -1
+ }
+ // binary search. adapted from sort/search.go.
+ h, i, j := 0, 0, sfilen
+ for i < j {
+ h = i + (j-i)/2
+ if ti.sfi[h].encName < name {
+ i = h + 1
+ } else {
+ j = h
}
}
+ if i < sfilen && ti.sfi[i].encName == name {
+ return i
+ }
return -1
}
+type rtid2ti struct {
+ rtid uintptr
+ ti *typeInfo
+}
+
// TypeInfos caches typeInfo for each type on first inspection.
//
// It is configured with a set of tag keys, which are used to get
// configuration for the type.
type TypeInfos struct {
- infos map[uintptr]*typeInfo
- mu sync.RWMutex
+ infos atomicTypeInfoSlice // formerly map[uintptr]*typeInfo, now *[]rtid2ti
+ mu sync.Mutex
tags []string
}
@@ -776,7 +1039,7 @@ type TypeInfos struct {
// This allows users customize the struct tag keys which contain configuration
// of their types.
func NewTypeInfos(tags []string) *TypeInfos {
- return &TypeInfos{tags: tags, infos: make(map[uintptr]*typeInfo, 64)}
+ return &TypeInfos{tags: tags}
}
func (x *TypeInfos) structTag(t reflect.StructTag) (s string) {
@@ -791,20 +1054,44 @@ func (x *TypeInfos) structTag(t reflect.StructTag) (s string) {
return
}
+func (x *TypeInfos) find(sp *[]rtid2ti, rtid uintptr) (idx int, ti *typeInfo) {
+ // binary search. adapted from sort/search.go.
+ // if sp == nil {
+ // return -1, nil
+ // }
+ s := *sp
+ h, i, j := 0, 0, len(s)
+ for i < j {
+ h = i + (j-i)/2
+ if s[h].rtid < rtid {
+ i = h + 1
+ } else {
+ j = h
+ }
+ }
+ if i < len(s) && s[i].rtid == rtid {
+ return i, s[i].ti
+ }
+ return i, nil
+}
+
func (x *TypeInfos) get(rtid uintptr, rt reflect.Type) (pti *typeInfo) {
- var ok bool
- x.mu.RLock()
- pti, ok = x.infos[rtid]
- x.mu.RUnlock()
- if ok {
- return
+ sp := x.infos.load()
+ var idx int
+ if sp != nil {
+ idx, pti = x.find(sp, rtid)
+ if pti != nil {
+ return
+ }
}
// do not hold lock while computing this.
// it may lead to duplication, but that's ok.
ti := typeInfo{rt: rt, rtid: rtid}
- ti.numMeth = uint16(rt.NumMethod())
+ // ti.rv0 = reflect.Zero(rt)
+ ti.numMeth = uint16(rt.NumMethod())
+ var ok bool
var indir int8
if ok, indir = implementsIntf(rt, binaryMarshalerTyp); ok {
ti.bm, ti.bmIndir = true, indir
@@ -843,63 +1130,68 @@ func (x *TypeInfos) get(rtid uintptr, rt reflect.Type) (pti *typeInfo) {
ti.baseId = rtid
} else {
ti.base = pt
- ti.baseId = reflect.ValueOf(pt).Pointer()
+ ti.baseId = rt2id(pt)
ti.baseIndir = ptIndir
}
if rt.Kind() == reflect.Struct {
- var siInfo *structFieldInfo
+ var omitEmpty bool
if f, ok := rt.FieldByName(structInfoFieldName); ok {
- siInfo = parseStructFieldInfo(structInfoFieldName, x.structTag(f.Tag))
+ siInfo := parseStructFieldInfo(structInfoFieldName, x.structTag(f.Tag))
ti.toArray = siInfo.toArray
+ omitEmpty = siInfo.omitEmpty
}
- pi := rgetPool.Get()
- pv := pi.(*rgetPoolT)
+ pp, pi := pool.tiLoad()
+ pv := pi.(*typeInfoLoadArray)
pv.etypes[0] = ti.baseId
- vv := rgetT{pv.fNames[:0], pv.encNames[:0], pv.etypes[:1], pv.sfis[:0]}
- x.rget(rt, rtid, nil, &vv, siInfo)
- ti.sfip = make([]*structFieldInfo, len(vv.sfis))
- ti.sfi = make([]*structFieldInfo, len(vv.sfis))
- copy(ti.sfip, vv.sfis)
- sort.Sort(sfiSortedByEncName(vv.sfis))
- copy(ti.sfi, vv.sfis)
- rgetPool.Put(pi)
+ vv := typeInfoLoad{pv.fNames[:0], pv.encNames[:0], pv.etypes[:1], pv.sfis[:0]}
+ x.rget(rt, rtid, omitEmpty, nil, &vv)
+ ti.sfip, ti.sfi, ti.anyOmitEmpty = rgetResolveSFI(vv.sfis, pv.sfiidx[:0])
+ pp.Put(pi)
}
// sfi = sfip
+ var vs []rtid2ti
x.mu.Lock()
- if pti, ok = x.infos[rtid]; !ok {
+ sp = x.infos.load()
+ if sp == nil {
pti = &ti
- x.infos[rtid] = pti
+ vs = []rtid2ti{{rtid, pti}}
+ x.infos.store(&vs)
+ } else {
+ idx, pti = x.find(sp, rtid)
+ if pti == nil {
+ s := *sp
+ pti = &ti
+ vs = make([]rtid2ti, len(s)+1)
+ copy(vs, s[:idx])
+ vs[idx] = rtid2ti{rtid, pti}
+ copy(vs[idx+1:], s[idx:])
+ x.infos.store(&vs)
+ }
}
x.mu.Unlock()
return
}
-func (x *TypeInfos) rget(rt reflect.Type, rtid uintptr,
- indexstack []int, pv *rgetT, siInfo *structFieldInfo,
+func (x *TypeInfos) rget(rt reflect.Type, rtid uintptr, omitEmpty bool,
+ indexstack []uint16, pv *typeInfoLoad,
) {
- // This will read up the fields and store how to access the value.
- // It uses the go language's rules for embedding, as below:
- // - if a field has been seen while traversing, skip it
- // - if an encName has been seen while traversing, skip it
- // - if an embedded type has been seen, skip it
+ // Read up fields and store how to access the value.
//
- // Also, per Go's rules, embedded fields must be analyzed AFTER all top-level fields.
+ // It uses go's rules for message selectors,
+ // which say that the field with the shallowest depth is selected.
//
// Note: we consciously use slices, not a map, to simulate a set.
- // Typically, types have < 16 fields, and iteration using equals is faster than maps there
-
- type anonField struct {
- ft reflect.Type
- idx int
+ // Typically, types have < 16 fields,
+ // and iteration using equals is faster than maps there
+ flen := rt.NumField()
+ if flen > (1<<maxLevelsEmbedding - 1) {
+ panic(fmt.Errorf("codec: types with more than %v fields are not supported - has %v fields", (1<<maxLevelsEmbedding - 1), flen))
}
-
- var anonFields []anonField
-
LOOP:
- for j, jlen := 0, rt.NumField(); j < jlen; j++ {
- f := rt.Field(j)
+ for j, jlen := uint16(0), uint16(flen); j < jlen; j++ {
+ f := rt.Field(int(j))
fkind := f.Type.Kind()
// skip if a func type, or is unexported, or structTag value == "-"
switch fkind {
@@ -907,7 +1199,8 @@ LOOP:
continue LOOP
}
- // if r1, _ := utf8.DecodeRuneInString(f.Name); r1 == utf8.RuneError || !unicode.IsUpper(r1) {
+ // if r1, _ := utf8.DecodeRuneInString(f.Name);
+ // r1 == utf8.RuneError || !unicode.IsUpper(r1) {
if f.PkgPath != "" && !f.Anonymous { // unexported, not embedded
continue
}
@@ -916,7 +1209,8 @@ LOOP:
continue
}
var si *structFieldInfo
- // if anonymous and no struct tag (or it's blank), and a struct (or pointer to struct), inline it.
+ // if anonymous and no struct tag (or it's blank),
+ // and a struct (or pointer to struct), inline it.
if f.Anonymous && fkind != reflect.Interface {
doInline := stag == ""
if !doInline {
@@ -930,8 +1224,31 @@ LOOP:
ft = ft.Elem()
}
if ft.Kind() == reflect.Struct {
- // handle anonymous fields after handling all the non-anon fields
- anonFields = append(anonFields, anonField{ft, j})
+ // if etypes contains this, don't call rget again (as fields are already seen here)
+ ftid := rt2id(ft)
+ // We cannot recurse forever, but we need to track other field depths.
+ // So - we break if we see a type twice (not the first time).
+ // This should be sufficient to handle an embedded type that refers to its
+ // owning type, which then refers to its embedded type.
+ processIt := true
+ numk := 0
+ for _, k := range pv.etypes {
+ if k == ftid {
+ numk++
+ if numk == rgetMaxRecursion {
+ processIt = false
+ break
+ }
+ }
+ }
+ if processIt {
+ pv.etypes = append(pv.etypes, ftid)
+ indexstack2 := make([]uint16, len(indexstack)+1)
+ copy(indexstack2, indexstack)
+ indexstack2[len(indexstack)] = j
+ // indexstack2 := append(append(make([]int, 0, len(indexstack)+4), indexstack...), j)
+ x.rget(ft, ftid, omitEmpty, indexstack2, pv)
+ }
continue
}
}
@@ -946,11 +1263,6 @@ LOOP:
panic(noFieldNameToStructFieldInfoErr)
}
- for _, k := range pv.fNames {
- if k == f.Name {
- continue LOOP
- }
- }
pv.fNames = append(pv.fNames, f.Name)
if si == nil {
@@ -958,62 +1270,104 @@ LOOP:
} else if si.encName == "" {
si.encName = f.Name
}
+ si.fieldName = f.Name
- for _, k := range pv.encNames {
- if k == si.encName {
- continue LOOP
- }
- }
pv.encNames = append(pv.encNames, si.encName)
// si.ikind = int(f.Type.Kind())
- if len(indexstack) == 0 {
- si.i = int16(j)
- } else {
- si.i = -1
- si.is = make([]int, len(indexstack)+1)
- copy(si.is, indexstack)
- si.is[len(indexstack)] = j
- // si.is = append(append(make([]int, 0, len(indexstack)+4), indexstack...), j)
+ if len(indexstack) > maxLevelsEmbedding-1 {
+ panic(fmt.Errorf("codec: only supports up to %v depth of embedding - type has %v depth", maxLevelsEmbedding-1, len(indexstack)))
}
+ si.nis = uint8(len(indexstack)) + 1
+ copy(si.is[:], indexstack)
+ si.is[len(indexstack)] = j
- if siInfo != nil {
- if siInfo.omitEmpty {
- si.omitEmpty = true
- }
+ if omitEmpty {
+ si.omitEmpty = true
}
pv.sfis = append(pv.sfis, si)
}
+}
- // now handle anonymous fields
-LOOP2:
- for _, af := range anonFields {
- // if etypes contains this, then do not call rget again (as the fields are already seen here)
- ftid := reflect.ValueOf(af.ft).Pointer()
- for _, k := range pv.etypes {
- if k == ftid {
- continue LOOP2
+// resolves the struct field info got from a call to rget.
+// Returns a trimmed, unsorted and sorted []*structFieldInfo.
+func rgetResolveSFI(x []*structFieldInfo, pv []sfiIdx) (y, z []*structFieldInfo, anyOmitEmpty bool) {
+ var n int
+ for i, v := range x {
+ xn := v.encName // TODO: fieldName or encName? use encName for now.
+ var found bool
+ for j, k := range pv {
+ if k.name == xn {
+ // one of them must be reset to nil, and the index updated appropriately to the other one
+ if v.nis == x[k.index].nis {
+ } else if v.nis < x[k.index].nis {
+ pv[j].index = i
+ if x[k.index] != nil {
+ x[k.index] = nil
+ n++
+ }
+ } else {
+ if x[i] != nil {
+ x[i] = nil
+ n++
+ }
+ }
+ found = true
+ break
}
}
- pv.etypes = append(pv.etypes, ftid)
+ if !found {
+ pv = append(pv, sfiIdx{xn, i})
+ }
+ }
+
+ // remove all the nils
+ y = make([]*structFieldInfo, len(x)-n)
+ n = 0
+ for _, v := range x {
+ if v == nil {
+ continue
+ }
+ if !anyOmitEmpty && v.omitEmpty {
+ anyOmitEmpty = true
+ }
+ y[n] = v
+ n++
+ }
+
+ z = make([]*structFieldInfo, len(y))
+ copy(z, y)
+ sort.Sort(sfiSortedByEncName(z))
+ return
+}
- indexstack2 := make([]int, len(indexstack)+1)
- copy(indexstack2, indexstack)
- indexstack2[len(indexstack)] = af.idx
- // indexstack2 := append(append(make([]int, 0, len(indexstack)+4), indexstack...), j)
- x.rget(af.ft, ftid, indexstack2, pv, siInfo)
+func xprintf(format string, a ...interface{}) {
+ if xDebug {
+ fmt.Fprintf(os.Stderr, format, a...)
}
}
func panicToErr(err *error) {
if recoverPanicToErr {
if x := recover(); x != nil {
- //debug.PrintStack()
+ // if false && xDebug {
+ // fmt.Printf("panic'ing with: %v\n", x)
+ // debug.PrintStack()
+ // }
panicValToErr(x, err)
}
}
}
+func panicToErrs2(err1, err2 *error) {
+ if recoverPanicToErr {
+ if x := recover(); x != nil {
+ panicValToErr(x, err1)
+ panicValToErr(x, err2)
+ }
+ }
+}
+
// func doPanic(tag string, format string, params ...interface{}) {
// params2 := make([]interface{}, len(params)+1)
// params2[0] = tag
@@ -1022,24 +1376,266 @@ func panicToErr(err *error) {
// }
func isImmutableKind(k reflect.Kind) (v bool) {
- return false ||
- k == reflect.Int ||
- k == reflect.Int8 ||
- k == reflect.Int16 ||
- k == reflect.Int32 ||
- k == reflect.Int64 ||
- k == reflect.Uint ||
- k == reflect.Uint8 ||
- k == reflect.Uint16 ||
- k == reflect.Uint32 ||
- k == reflect.Uint64 ||
- k == reflect.Uintptr ||
- k == reflect.Float32 ||
- k == reflect.Float64 ||
- k == reflect.Bool ||
- k == reflect.String
+ return immutableKindsSet[k]
+ // return false ||
+ // k == reflect.Int ||
+ // k == reflect.Int8 ||
+ // k == reflect.Int16 ||
+ // k == reflect.Int32 ||
+ // k == reflect.Int64 ||
+ // k == reflect.Uint ||
+ // k == reflect.Uint8 ||
+ // k == reflect.Uint16 ||
+ // k == reflect.Uint32 ||
+ // k == reflect.Uint64 ||
+ // k == reflect.Uintptr ||
+ // k == reflect.Float32 ||
+ // k == reflect.Float64 ||
+ // k == reflect.Bool ||
+ // k == reflect.String
+}
+
+// ----
+
+type codecFnInfo struct {
+ ti *typeInfo
+ xfFn Ext
+ xfTag uint64
+ seq seqType
+ addr bool
+}
+
+// codecFn encapsulates the captured variables and the encode function.
+// This way, we only do some calculations one times, and pass to the
+// code block that should be called (encapsulated in a function)
+// instead of executing the checks every time.
+type codecFn struct {
+ i codecFnInfo
+ fe func(*Encoder, *codecFnInfo, reflect.Value)
+ fd func(*Decoder, *codecFnInfo, reflect.Value)
+}
+
+type codecRtidFn struct {
+ rtid uintptr
+ fn codecFn
+}
+
+type codecFner struct {
+ hh Handle
+ h *BasicHandle
+ cs [arrayCacheLen]*[arrayCacheLen]codecRtidFn
+ s []*[arrayCacheLen]codecRtidFn
+ sn uint32
+ be bool
+ js bool
+ cf [arrayCacheLen]codecRtidFn
+}
+
+func (c *codecFner) reset(hh Handle) {
+ c.hh = hh
+ c.h = hh.getBasicHandle()
+ _, c.js = hh.(*JsonHandle)
+ c.be = hh.isBinary()
+}
+
+func (c *codecFner) get(rt reflect.Type, checkFastpath, checkCodecSelfer bool) (fn *codecFn) {
+ rtid := rt2id(rt)
+ var j uint32
+ var sn uint32 = c.sn
+ if sn == 0 {
+ c.s = c.cs[:1]
+ c.s[0] = &c.cf
+ c.cf[0].rtid = rtid
+ fn = &(c.cf[0].fn)
+ c.sn = 1
+ } else {
+ LOOP1:
+ for _, x := range c.s {
+ for i := range x {
+ if j == sn {
+ break LOOP1
+ }
+ if x[i].rtid == rtid {
+ fn = &(x[i].fn)
+ return
+ }
+ j++
+ }
+ }
+ sx, sy := sn/arrayCacheLen, sn%arrayCacheLen
+ if sy == 0 {
+ c.s = append(c.s, &[arrayCacheLen]codecRtidFn{})
+ }
+ c.s[sx][sy].rtid = rtid
+ fn = &(c.s[sx][sy].fn)
+ c.sn++
+ }
+
+ ti := c.h.getTypeInfo(rtid, rt)
+ fi := &(fn.i)
+ fi.ti = ti
+
+ if checkCodecSelfer && ti.cs {
+ fn.fe = (*Encoder).selferMarshal
+ fn.fd = (*Decoder).selferUnmarshal
+ } else if rtid == rawTypId {
+ fn.fe = (*Encoder).raw
+ fn.fd = (*Decoder).raw
+ } else if rtid == rawExtTypId {
+ fn.fe = (*Encoder).rawExt
+ fn.fd = (*Decoder).rawExt
+ fn.i.addr = true
+ } else if c.hh.IsBuiltinType(rtid) {
+ fn.fe = (*Encoder).builtin
+ fn.fd = (*Decoder).builtin
+ fn.i.addr = true
+ } else if xfFn := c.h.getExt(rtid); xfFn != nil {
+ fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext
+ fn.fe = (*Encoder).ext
+ fn.fd = (*Decoder).ext
+ fn.i.addr = true
+ } else if supportMarshalInterfaces && c.be && ti.bm {
+ fn.fe = (*Encoder).binaryMarshal
+ fn.fd = (*Decoder).binaryUnmarshal
+ } else if supportMarshalInterfaces && !c.be && c.js && ti.jm {
+ //If JSON, we should check JSONMarshal before textMarshal
+ fn.fe = (*Encoder).jsonMarshal
+ fn.fd = (*Decoder).jsonUnmarshal
+ } else if supportMarshalInterfaces && !c.be && ti.tm {
+ fn.fe = (*Encoder).textMarshal
+ fn.fd = (*Decoder).textUnmarshal
+ } else {
+ rk := rt.Kind()
+ if fastpathEnabled && checkFastpath && (rk == reflect.Map || rk == reflect.Slice) {
+ if rt.PkgPath() == "" { // un-named slice or map
+ if idx := fastpathAV.index(rtid); idx != -1 {
+ fn.fe = fastpathAV[idx].encfn
+ fn.fd = fastpathAV[idx].decfn
+ fn.i.addr = true
+ }
+ } else {
+ // use mapping for underlying type if there
+ var rtu reflect.Type
+ if rk == reflect.Map {
+ rtu = reflect.MapOf(rt.Key(), rt.Elem())
+ } else {
+ rtu = reflect.SliceOf(rt.Elem())
+ }
+ rtuid := rt2id(rtu)
+ if idx := fastpathAV.index(rtuid); idx != -1 {
+ xfnf := fastpathAV[idx].encfn
+ xrt := fastpathAV[idx].rt
+ fn.fe = func(e *Encoder, xf *codecFnInfo, xrv reflect.Value) {
+ xfnf(e, xf, xrv.Convert(xrt))
+ }
+ fn.i.addr = true
+ xfnf2 := fastpathAV[idx].decfn
+ fn.fd = func(d *Decoder, xf *codecFnInfo, xrv reflect.Value) {
+ xfnf2(d, xf, xrv.Convert(reflect.PtrTo(xrt)))
+ }
+ }
+ }
+ }
+ if fn.fe == nil && fn.fd == nil {
+ switch rk {
+ case reflect.Bool:
+ fn.fe = (*Encoder).kBool
+ fn.fd = (*Decoder).kBool
+ case reflect.String:
+ fn.fe = (*Encoder).kString
+ fn.fd = (*Decoder).kString
+ case reflect.Int:
+ fn.fd = (*Decoder).kInt
+ fn.fe = (*Encoder).kInt
+ case reflect.Int8:
+ fn.fe = (*Encoder).kInt
+ fn.fd = (*Decoder).kInt8
+ case reflect.Int16:
+ fn.fe = (*Encoder).kInt
+ fn.fd = (*Decoder).kInt16
+ case reflect.Int32:
+ fn.fe = (*Encoder).kInt
+ fn.fd = (*Decoder).kInt32
+ case reflect.Int64:
+ fn.fe = (*Encoder).kInt
+ fn.fd = (*Decoder).kInt64
+ case reflect.Uint:
+ fn.fd = (*Decoder).kUint
+ fn.fe = (*Encoder).kUint
+ case reflect.Uint8:
+ fn.fe = (*Encoder).kUint
+ fn.fd = (*Decoder).kUint8
+ case reflect.Uint16:
+ fn.fe = (*Encoder).kUint
+ fn.fd = (*Decoder).kUint16
+ case reflect.Uint32:
+ fn.fe = (*Encoder).kUint
+ fn.fd = (*Decoder).kUint32
+ case reflect.Uint64:
+ fn.fe = (*Encoder).kUint
+ fn.fd = (*Decoder).kUint64
+ // case reflect.Ptr:
+ // fn.fd = (*Decoder).kPtr
+ case reflect.Uintptr:
+ fn.fe = (*Encoder).kUint
+ fn.fd = (*Decoder).kUintptr
+ case reflect.Float32:
+ fn.fe = (*Encoder).kFloat32
+ fn.fd = (*Decoder).kFloat32
+ case reflect.Float64:
+ fn.fe = (*Encoder).kFloat64
+ fn.fd = (*Decoder).kFloat64
+ case reflect.Invalid:
+ fn.fe = (*Encoder).kInvalid
+ case reflect.Chan:
+ fi.seq = seqTypeChan
+ fn.fe = (*Encoder).kSlice
+ fn.fd = (*Decoder).kSlice
+ case reflect.Slice:
+ fi.seq = seqTypeSlice
+ fn.fe = (*Encoder).kSlice
+ fn.fd = (*Decoder).kSlice
+ case reflect.Array:
+ fi.seq = seqTypeArray
+ fn.fe = (*Encoder).kSlice
+ fi.addr = false
+ rt2 := reflect.SliceOf(rt.Elem())
+ fn.fd = func(d *Decoder, xf *codecFnInfo, xrv reflect.Value) {
+ // println(">>>>>> decoding an array ... ")
+ d.cf.get(rt2, true, false).fd(d, xf, xrv.Slice(0, xrv.Len()))
+ // println(">>>>>> decoding an array ... DONE")
+ }
+ // fn.fd = (*Decoder).kArray
+ case reflect.Struct:
+ if ti.anyOmitEmpty {
+ fn.fe = (*Encoder).kStruct
+ } else {
+ fn.fe = (*Encoder).kStructNoOmitempty
+ }
+ fn.fd = (*Decoder).kStruct
+ // reflect.Ptr and reflect.Interface are handled already by preEncodeValue
+ // case reflect.Ptr:
+ // fn.fe = (*Encoder).kPtr
+ // case reflect.Interface:
+ // fn.fe = (*Encoder).kInterface
+ case reflect.Map:
+ fn.fe = (*Encoder).kMap
+ fn.fd = (*Decoder).kMap
+ case reflect.Interface:
+ // encode: reflect.Interface are handled already by preEncodeValue
+ fn.fd = (*Decoder).kInterface
+ default:
+ fn.fe = (*Encoder).kErr
+ fn.fd = (*Decoder).kErr
+ }
+ }
+ }
+
+ return
}
+// ----
+
// these functions must be inlinable, and not call anybody
type checkOverflow struct{}
@@ -1097,6 +1693,7 @@ func isNaN(f float64) bool { return f != f }
type intSlice []int64
type uintSlice []uint64
+type uintptrSlice []uintptr
type floatSlice []float64
type boolSlice []bool
type stringSlice []string
@@ -1110,6 +1707,10 @@ func (p uintSlice) Len() int { return len(p) }
func (p uintSlice) Less(i, j int) bool { return p[i] < p[j] }
func (p uintSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
+func (p uintptrSlice) Len() int { return len(p) }
+func (p uintptrSlice) Less(i, j int) bool { return p[i] < p[j] }
+func (p uintptrSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
+
func (p floatSlice) Len() int { return len(p) }
func (p floatSlice) Less(i, j int) bool {
return p[i] < p[j] || isNaN(p[i]) && !isNaN(p[j])
@@ -1206,7 +1807,6 @@ type set []uintptr
func (s *set) add(v uintptr) (exists bool) {
// e.ci is always nil, or len >= 1
- // defer func() { fmt.Printf("$$$$$$$$$$$ cirRef Add: %v, exists: %v\n", v, exists) }()
x := *s
if x == nil {
x = make([]uintptr, 1, 8)
@@ -1247,7 +1847,6 @@ func (s *set) add(v uintptr) (exists bool) {
}
func (s *set) remove(v uintptr) (exists bool) {
- // defer func() { fmt.Printf("$$$$$$$$$$$ cirRef Rm: %v, exists: %v\n", v, exists) }()
x := *s
if len(x) == 0 {
return
@@ -1269,3 +1868,77 @@ func (s *set) remove(v uintptr) (exists bool) {
}
return
}
+
+// ------
+
+// bitset types are better than [256]bool, because they permit the whole
+// bitset array being on a single cache line and use less memory.
+
+// given x > 0 and n > 0 and x is exactly 2^n, then pos/x === pos>>n AND pos%x === pos&(x-1).
+// consequently, pos/32 === pos>>5, pos/16 === pos>>4, pos/8 === pos>>3, pos%8 == pos&7
+
+type bitset256 [32]byte
+
+func (x *bitset256) set(pos byte) {
+ x[pos>>3] |= (1 << (pos & 7))
+}
+func (x *bitset256) unset(pos byte) {
+ x[pos>>3] &^= (1 << (pos & 7))
+}
+func (x *bitset256) isset(pos byte) bool {
+ return x[pos>>3]&(1<<(pos&7)) != 0
+}
+
+type bitset128 [16]byte
+
+func (x *bitset128) set(pos byte) {
+ x[pos>>3] |= (1 << (pos & 7))
+}
+func (x *bitset128) unset(pos byte) {
+ x[pos>>3] &^= (1 << (pos & 7))
+}
+func (x *bitset128) isset(pos byte) bool {
+ return x[pos>>3]&(1<<(pos&7)) != 0
+}
+
+// ------------
+
+type pooler struct {
+ // for stringRV
+ strRv8, strRv16, strRv32, strRv64, strRv128 sync.Pool
+ // for the decNaked
+ dn sync.Pool
+ tiload sync.Pool
+}
+
+func (p *pooler) init() {
+ p.strRv8.New = func() interface{} { return new([8]stringRv) }
+ p.strRv16.New = func() interface{} { return new([16]stringRv) }
+ p.strRv32.New = func() interface{} { return new([32]stringRv) }
+ p.strRv64.New = func() interface{} { return new([64]stringRv) }
+ p.strRv128.New = func() interface{} { return new([128]stringRv) }
+ p.dn.New = func() interface{} { x := new(decNaked); x.init(); return x }
+ p.tiload.New = func() interface{} { return new(typeInfoLoadArray) }
+}
+
+func (p *pooler) stringRv8() (sp *sync.Pool, v interface{}) {
+ return &p.strRv8, p.strRv8.Get()
+}
+func (p *pooler) stringRv16() (sp *sync.Pool, v interface{}) {
+ return &p.strRv16, p.strRv16.Get()
+}
+func (p *pooler) stringRv32() (sp *sync.Pool, v interface{}) {
+ return &p.strRv32, p.strRv32.Get()
+}
+func (p *pooler) stringRv64() (sp *sync.Pool, v interface{}) {
+ return &p.strRv64, p.strRv64.Get()
+}
+func (p *pooler) stringRv128() (sp *sync.Pool, v interface{}) {
+ return &p.strRv128, p.strRv128.Get()
+}
+func (p *pooler) decNaked() (sp *sync.Pool, v interface{}) {
+ return &p.dn, p.dn.Get()
+}
+func (p *pooler) tiLoad() (sp *sync.Pool, v interface{}) {
+ return &p.tiload, p.tiload.Get()
+}
diff --git a/codec/helper_internal.go b/codec/helper_internal.go
index dea981f..eb18e2c 100644
--- a/codec/helper_internal.go
+++ b/codec/helper_internal.go
@@ -70,8 +70,8 @@ func hIsEmptyValue(v reflect.Value, deref, checkStruct bool) bool {
return false
}
-func isEmptyValue(v reflect.Value) bool {
- return hIsEmptyValue(v, derefForIsEmptyValue, checkStructForEmptyValue)
+func isEmptyValue(v reflect.Value, deref, checkStruct bool) bool {
+ return hIsEmptyValue(v, deref, checkStruct)
}
func pruneSignExt(v []byte, pos bool) (n int) {
@@ -219,24 +219,3 @@ func growCap(oldCap, unit, num int) (newCap int) {
}
return
}
-
-func expandSliceValue(s reflect.Value, num int) reflect.Value {
- if num <= 0 {
- return s
- }
- l0 := s.Len()
- l1 := l0 + num // new slice length
- if l1 < l0 {
- panic("ExpandSlice: slice overflow")
- }
- c0 := s.Cap()
- if l1 <= c0 {
- return s.Slice(0, l1)
- }
- st := s.Type()
- c1 := growCap(c0, int(st.Elem().Size()), num)
- s2 := reflect.MakeSlice(st, l1, c1)
- // println("expandslicevalue: cap-old: ", c0, ", cap-new: ", c1, ", len-new: ", l1)
- reflect.Copy(s2, s)
- return s2
-}
diff --git a/codec/helper_not_unsafe.go b/codec/helper_not_unsafe.go
index 7c2ffc0..9d9d048 100644
--- a/codec/helper_not_unsafe.go
+++ b/codec/helper_not_unsafe.go
@@ -1,13 +1,21 @@
-//+build !unsafe
+// +build !go1.7 safe appengine
// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
// Use of this source code is governed by a MIT license found in the LICENSE file.
package codec
+import (
+ "reflect"
+ "sync/atomic"
+)
+
// stringView returns a view of the []byte as a string.
// In unsafe mode, it doesn't incur allocation and copying caused by conversion.
// In regular safe mode, it is an allocation and copy.
+//
+// Usage: Always maintain a reference to v while result of this call is in use,
+// and call keepAlive4BytesView(v) at point where done with view.
func stringView(v []byte) string {
return string(v)
}
@@ -15,6 +23,134 @@ func stringView(v []byte) string {
// bytesView returns a view of the string as a []byte.
// In unsafe mode, it doesn't incur allocation and copying caused by conversion.
// In regular safe mode, it is an allocation and copy.
+//
+// Usage: Always maintain a reference to v while result of this call is in use,
+// and call keepAlive4BytesView(v) at point where done with view.
func bytesView(v string) []byte {
return []byte(v)
}
+
+func definitelyNil(v interface{}) bool {
+ return false
+ // rv := reflect.ValueOf(v)
+ // switch rv.Kind() {
+ // case reflect.Invalid:
+ // return true
+ // case reflect.Ptr, reflect.Interface, reflect.Chan, reflect.Slice, reflect.Map, reflect.Func:
+ // return rv.IsNil()
+ // default:
+ // return false
+ // }
+}
+
+// // keepAlive4BytesView maintains a reference to the input parameter for bytesView.
+// //
+// // Usage: call this at point where done with the bytes view.
+// func keepAlive4BytesView(v string) {}
+
+// // keepAlive4BytesView maintains a reference to the input parameter for stringView.
+// //
+// // Usage: call this at point where done with the string view.
+// func keepAlive4StringView(v []byte) {}
+
+func rv2i(rv reflect.Value) interface{} {
+ return rv.Interface()
+}
+
+func rt2id(rt reflect.Type) uintptr {
+ return reflect.ValueOf(rt).Pointer()
+}
+
+func rv2rtid(rv reflect.Value) uintptr {
+ return reflect.ValueOf(rv.Type()).Pointer()
+}
+
+// --------------------------
+// type ptrToRvMap struct{}
+
+// func (_ *ptrToRvMap) init() {}
+// func (_ *ptrToRvMap) get(i interface{}) reflect.Value {
+// return reflect.ValueOf(i).Elem()
+// }
+
+// --------------------------
+type atomicTypeInfoSlice struct {
+ v atomic.Value
+}
+
+func (x *atomicTypeInfoSlice) load() *[]rtid2ti {
+ i := x.v.Load()
+ if i == nil {
+ return nil
+ }
+ return i.(*[]rtid2ti)
+}
+
+func (x *atomicTypeInfoSlice) store(p *[]rtid2ti) {
+ x.v.Store(p)
+}
+
+// --------------------------
+func (d *Decoder) raw(f *codecFnInfo, rv reflect.Value) {
+ rv.SetBytes(d.rawBytes())
+}
+
+func (d *Decoder) kString(f *codecFnInfo, rv reflect.Value) {
+ rv.SetString(d.d.DecodeString())
+}
+
+func (d *Decoder) kBool(f *codecFnInfo, rv reflect.Value) {
+ rv.SetBool(d.d.DecodeBool())
+}
+
+func (d *Decoder) kFloat32(f *codecFnInfo, rv reflect.Value) {
+ rv.SetFloat(d.d.DecodeFloat(true))
+}
+
+func (d *Decoder) kFloat64(f *codecFnInfo, rv reflect.Value) {
+ rv.SetFloat(d.d.DecodeFloat(false))
+}
+
+func (d *Decoder) kInt(f *codecFnInfo, rv reflect.Value) {
+ rv.SetInt(d.d.DecodeInt(intBitsize))
+}
+
+func (d *Decoder) kInt8(f *codecFnInfo, rv reflect.Value) {
+ rv.SetInt(d.d.DecodeInt(8))
+}
+
+func (d *Decoder) kInt16(f *codecFnInfo, rv reflect.Value) {
+ rv.SetInt(d.d.DecodeInt(16))
+}
+
+func (d *Decoder) kInt32(f *codecFnInfo, rv reflect.Value) {
+ rv.SetInt(d.d.DecodeInt(32))
+}
+
+func (d *Decoder) kInt64(f *codecFnInfo, rv reflect.Value) {
+ rv.SetInt(d.d.DecodeInt(64))
+}
+
+func (d *Decoder) kUint(f *codecFnInfo, rv reflect.Value) {
+ rv.SetUint(d.d.DecodeUint(uintBitsize))
+}
+
+func (d *Decoder) kUintptr(f *codecFnInfo, rv reflect.Value) {
+ rv.SetUint(d.d.DecodeUint(uintBitsize))
+}
+
+func (d *Decoder) kUint8(f *codecFnInfo, rv reflect.Value) {
+ rv.SetUint(d.d.DecodeUint(8))
+}
+
+func (d *Decoder) kUint16(f *codecFnInfo, rv reflect.Value) {
+ rv.SetUint(d.d.DecodeUint(16))
+}
+
+func (d *Decoder) kUint32(f *codecFnInfo, rv reflect.Value) {
+ rv.SetUint(d.d.DecodeUint(32))
+}
+
+func (d *Decoder) kUint64(f *codecFnInfo, rv reflect.Value) {
+ rv.SetUint(d.d.DecodeUint(64))
+}
diff --git a/codec/helper_test.go b/codec/helper_test.go
index e1dea52..611eac4 100644
--- a/codec/helper_test.go
+++ b/codec/helper_test.go
@@ -5,155 +5,14 @@ package codec
// All non-std package dependencies related to testing live in this file,
// so porting to different environment is easy (just update functions).
-//
-// This file sets up the variables used, including testInitFns.
-// Each file should add initialization that should be performed
-// after flags are parsed.
-//
-// init is a multi-step process:
-// - setup vars (handled by init functions in each file)
-// - parse flags
-// - setup derived vars (handled by pre-init registered functions - registered in init function)
-// - post init (handled by post-init registered functions - registered in init function)
-// This way, no one has to manage carefully control the initialization
-// using file names, etc.
-//
-// Tests which require external dependencies need the -tag=x parameter.
-// They should be run as:
-// go test -tags=x -run=. <other parameters ...>
-// Benchmarks should also take this parameter, to include the sereal, xdr, etc.
-// To run against codecgen, etc, make sure you pass extra parameters.
-// Example usage:
-// go test "-tags=x codecgen unsafe" -bench=. <other parameters ...>
-//
-// To fully test everything:
-// go test -tags=x -benchtime=100ms -tv -bg -bi -brw -bu -v -run=. -bench=.
-
-// Handling flags
-// codec_test.go will define a set of global flags for testing, including:
-// - Use Reset
-// - Use IO reader/writer (vs direct bytes)
-// - Set Canonical
-// - Set InternStrings
-// - Use Symbols
-//
-// This way, we can test them all by running same set of tests with a different
-// set of flags.
-//
-// Following this, all the benchmarks will utilize flags set by codec_test.go
-// and will not redefine these "global" flags.
import (
- "bytes"
"errors"
- "flag"
"fmt"
"reflect"
- "sync"
"testing"
)
-type testHED struct {
- H Handle
- E *Encoder
- D *Decoder
-}
-
-var (
- testNoopH = NoopHandle(8)
- testMsgpackH = &MsgpackHandle{}
- testBincH = &BincHandle{}
- testSimpleH = &SimpleHandle{}
- testCborH = &CborHandle{}
- testJsonH = &JsonHandle{}
-
- testHandles []Handle
- testPreInitFns []func()
- testPostInitFns []func()
-
- testOnce sync.Once
-
- testHEDs []testHED
-)
-
-func init() {
- testHEDs = make([]testHED, 0, 32)
- testHandles = append(testHandles,
- testNoopH, testMsgpackH, testBincH, testSimpleH,
- testCborH, testJsonH)
-}
-
-func testHEDGet(h Handle) *testHED {
- for i := range testHEDs {
- v := &testHEDs[i]
- if v.H == h {
- return v
- }
- }
- testHEDs = append(testHEDs, testHED{h, NewEncoder(nil, h), NewDecoder(nil, h)})
- return &testHEDs[len(testHEDs)-1]
-}
-
-func testInitAll() {
- flag.Parse()
- for _, f := range testPreInitFns {
- f()
- }
- for _, f := range testPostInitFns {
- f()
- }
-}
-
-func testCodecEncode(ts interface{}, bsIn []byte,
- fn func([]byte) *bytes.Buffer, h Handle) (bs []byte, err error) {
- // bs = make([]byte, 0, approxSize)
- var e *Encoder
- var buf *bytes.Buffer
- if testUseReset {
- e = testHEDGet(h).E
- } else {
- e = NewEncoder(nil, h)
- }
- if testUseIoEncDec {
- buf = fn(bsIn)
- e.Reset(buf)
- } else {
- bs = bsIn
- e.ResetBytes(&bs)
- }
- if testUseMust {
- e.MustEncode(ts)
- } else {
- err = e.Encode(ts)
- }
- if testUseIoEncDec {
- bs = buf.Bytes()
- }
- return
-}
-
-func testCodecDecode(bs []byte, ts interface{}, h Handle) (err error) {
- var d *Decoder
- var buf *bytes.Reader
- if testUseReset {
- d = testHEDGet(h).D
- } else {
- d = NewDecoder(nil, h)
- }
- if testUseIoEncDec {
- buf = bytes.NewReader(bs)
- d.Reset(buf)
- } else {
- d.ResetBytes(bs)
- }
- if testUseMust {
- d.MustDecode(ts)
- } else {
- err = d.Decode(ts)
- }
- return
-}
-
// ----- functions below are used only by tests (not benchmarks)
const (
diff --git a/codec/helper_unsafe.go b/codec/helper_unsafe.go
index 373b2b1..c7c01b8 100644
--- a/codec/helper_unsafe.go
+++ b/codec/helper_unsafe.go
@@ -1,4 +1,6 @@
-//+build unsafe
+// +build !safe
+// +build !appengine
+// +build go1.7
// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
// Use of this source code is governed by a MIT license found in the LICENSE file.
@@ -6,40 +8,411 @@
package codec
import (
+ "reflect"
+ "sync/atomic"
"unsafe"
)
// This file has unsafe variants of some helper methods.
+// NOTE: See helper_not_unsafe.go for the usage information.
+
+// var zeroRTv [4]uintptr
+
+const unsafeFlagIndir = 1 << 7 // keep in sync with GO_ROOT/src/reflect/value.go
type unsafeString struct {
Data uintptr
Len int
}
-type unsafeBytes struct {
+type unsafeSlice struct {
Data uintptr
Len int
Cap int
}
-// stringView returns a view of the []byte as a string.
-// In unsafe mode, it doesn't incur allocation and copying caused by conversion.
-// In regular safe mode, it is an allocation and copy.
+type unsafeIntf struct {
+ typ unsafe.Pointer
+ word unsafe.Pointer
+}
+
+type unsafeReflectValue struct {
+ typ unsafe.Pointer
+ ptr unsafe.Pointer
+ flag uintptr
+}
+
func stringView(v []byte) string {
if len(v) == 0 {
return ""
}
- x := unsafeString{uintptr(unsafe.Pointer(&v[0])), len(v)}
- return *(*string)(unsafe.Pointer(&x))
+
+ bx := (*unsafeSlice)(unsafe.Pointer(&v))
+ sx := unsafeString{bx.Data, bx.Len}
+ return *(*string)(unsafe.Pointer(&sx))
}
-// bytesView returns a view of the string as a []byte.
-// In unsafe mode, it doesn't incur allocation and copying caused by conversion.
-// In regular safe mode, it is an allocation and copy.
func bytesView(v string) []byte {
if len(v) == 0 {
return zeroByteSlice
}
- x := unsafeBytes{uintptr(unsafe.Pointer(&v)), len(v), len(v)}
- return *(*[]byte)(unsafe.Pointer(&x))
+
+ sx := (*unsafeString)(unsafe.Pointer(&v))
+ bx := unsafeSlice{sx.Data, sx.Len, sx.Len}
+ return *(*[]byte)(unsafe.Pointer(&bx))
+}
+
+func definitelyNil(v interface{}) bool {
+ return (*unsafeIntf)(unsafe.Pointer(&v)).word == nil
+}
+
+// func keepAlive4BytesView(v string) {
+// runtime.KeepAlive(v)
+// }
+
+// func keepAlive4StringView(v []byte) {
+// runtime.KeepAlive(v)
+// }
+
+// TODO: consider a more generally-known optimization for reflect.Value ==> Interface
+//
+// Currently, we use this fragile method that taps into implememtation details from
+// the source go stdlib reflect/value.go,
+// and trims the implementation.
+func rv2i(rv reflect.Value) interface{} {
+ if false {
+ return rv.Interface()
+ }
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ // references that are single-words (map, ptr) may be double-referenced as flagIndir
+ kk := urv.flag & (1<<5 - 1)
+ if (kk == uintptr(reflect.Map) || kk == uintptr(reflect.Ptr)) && urv.flag&unsafeFlagIndir != 0 {
+ return *(*interface{})(unsafe.Pointer(&unsafeIntf{word: *(*unsafe.Pointer)(urv.ptr), typ: urv.typ}))
+ }
+ return *(*interface{})(unsafe.Pointer(&unsafeIntf{word: urv.ptr, typ: urv.typ}))
+}
+
+func rt2id(rt reflect.Type) uintptr {
+ return uintptr(((*unsafeIntf)(unsafe.Pointer(&rt))).word)
+}
+
+func rv2rtid(rv reflect.Value) uintptr {
+ return uintptr((*unsafeReflectValue)(unsafe.Pointer(&rv)).typ)
+}
+
+// func rv0t(rt reflect.Type) reflect.Value {
+// ut := (*unsafeIntf)(unsafe.Pointer(&rt))
+// // we need to determine whether ifaceIndir, and then whether to just pass 0 as the ptr
+// uv := unsafeReflectValue{ut.word, &zeroRTv, flag(rt.Kind())}
+// return *(*reflect.Value)(unsafe.Pointer(&uv})
+// }
+
+// --------------------------
+type atomicTypeInfoSlice struct {
+ v unsafe.Pointer
+}
+
+func (x *atomicTypeInfoSlice) load() *[]rtid2ti {
+ return (*[]rtid2ti)(atomic.LoadPointer(&x.v))
+}
+
+func (x *atomicTypeInfoSlice) store(p *[]rtid2ti) {
+ atomic.StorePointer(&x.v, unsafe.Pointer(p))
+}
+
+// --------------------------
+func (d *Decoder) raw(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ // if urv.flag&unsafeFlagIndir != 0 {
+ // urv.ptr = *(*unsafe.Pointer)(urv.ptr)
+ // }
+ *(*[]byte)(urv.ptr) = d.rawBytes()
+}
+
+func (d *Decoder) kString(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ *(*string)(urv.ptr) = d.d.DecodeString()
+}
+
+func (d *Decoder) kBool(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ *(*bool)(urv.ptr) = d.d.DecodeBool()
+}
+
+func (d *Decoder) kFloat32(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ *(*float32)(urv.ptr) = float32(d.d.DecodeFloat(true))
+}
+
+func (d *Decoder) kFloat64(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ *(*float64)(urv.ptr) = d.d.DecodeFloat(false)
}
+
+func (d *Decoder) kInt(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ *(*int)(urv.ptr) = int(d.d.DecodeInt(intBitsize))
+}
+
+func (d *Decoder) kInt8(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ *(*int8)(urv.ptr) = int8(d.d.DecodeInt(8))
+}
+
+func (d *Decoder) kInt16(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ *(*int16)(urv.ptr) = int16(d.d.DecodeInt(16))
+}
+
+func (d *Decoder) kInt32(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ *(*int32)(urv.ptr) = int32(d.d.DecodeInt(32))
+}
+
+func (d *Decoder) kInt64(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ *(*int64)(urv.ptr) = d.d.DecodeInt(64)
+}
+
+func (d *Decoder) kUint(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ *(*uint)(urv.ptr) = uint(d.d.DecodeUint(uintBitsize))
+}
+
+func (d *Decoder) kUintptr(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ *(*uintptr)(urv.ptr) = uintptr(d.d.DecodeUint(uintBitsize))
+}
+
+func (d *Decoder) kUint8(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ *(*uint8)(urv.ptr) = uint8(d.d.DecodeUint(8))
+}
+
+func (d *Decoder) kUint16(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ *(*uint16)(urv.ptr) = uint16(d.d.DecodeUint(16))
+}
+
+func (d *Decoder) kUint32(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ *(*uint32)(urv.ptr) = uint32(d.d.DecodeUint(32))
+}
+
+func (d *Decoder) kUint64(f *codecFnInfo, rv reflect.Value) {
+ urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+ *(*uint64)(urv.ptr) = d.d.DecodeUint(64)
+}
+
+// ------------
+
+// func rt2id(rt reflect.Type) uintptr {
+// return uintptr(((*unsafeIntf)(unsafe.Pointer(&rt))).word)
+// // var i interface{} = rt
+// // // ui := (*unsafeIntf)(unsafe.Pointer(&i))
+// // return ((*unsafeIntf)(unsafe.Pointer(&i))).word
+// }
+
+// func rv2i(rv reflect.Value) interface{} {
+// urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+// // non-reference type: already indir
+// // reference type: depend on flagIndir property ('cos maybe was double-referenced)
+// // const (unsafeRvFlagKindMask = 1<<5 - 1 , unsafeRvFlagIndir = 1 << 7 )
+// // rvk := reflect.Kind(urv.flag & (1<<5 - 1))
+// // if (rvk == reflect.Chan ||
+// // rvk == reflect.Func ||
+// // rvk == reflect.Interface ||
+// // rvk == reflect.Map ||
+// // rvk == reflect.Ptr ||
+// // rvk == reflect.UnsafePointer) && urv.flag&(1<<8) != 0 {
+// // fmt.Printf(">>>>> ---- double indirect reference: %v, %v\n", rvk, rv.Type())
+// // return *(*interface{})(unsafe.Pointer(&unsafeIntf{word: *(*unsafe.Pointer)(urv.ptr), typ: urv.typ}))
+// // }
+// if urv.flag&(1<<5-1) == uintptr(reflect.Map) && urv.flag&(1<<7) != 0 {
+// // fmt.Printf(">>>>> ---- double indirect reference: %v, %v\n", rvk, rv.Type())
+// return *(*interface{})(unsafe.Pointer(&unsafeIntf{word: *(*unsafe.Pointer)(urv.ptr), typ: urv.typ}))
+// }
+// // fmt.Printf(">>>>> ++++ direct reference: %v, %v\n", rvk, rv.Type())
+// return *(*interface{})(unsafe.Pointer(&unsafeIntf{word: urv.ptr, typ: urv.typ}))
+// }
+
+// const (
+// unsafeRvFlagKindMask = 1<<5 - 1
+// unsafeRvKindDirectIface = 1 << 5
+// unsafeRvFlagIndir = 1 << 7
+// unsafeRvFlagAddr = 1 << 8
+// unsafeRvFlagMethod = 1 << 9
+
+// _USE_RV_INTERFACE bool = false
+// _UNSAFE_RV_DEBUG = true
+// )
+
+// type unsafeRtype struct {
+// _ [2]uintptr
+// _ uint32
+// _ uint8
+// _ uint8
+// _ uint8
+// kind uint8
+// _ [2]uintptr
+// _ int32
+// }
+
+// func _rv2i(rv reflect.Value) interface{} {
+// // Note: From use,
+// // - it's never an interface
+// // - the only calls here are for ifaceIndir types.
+// // (though that conditional is wrong)
+// // To know for sure, we need the value of t.kind (which is not exposed).
+// //
+// // Need to validate the path: type is indirect ==> only value is indirect ==> default (value is direct)
+// // - Type indirect, Value indirect: ==> numbers, boolean, slice, struct, array, string
+// // - Type Direct, Value indirect: ==> map???
+// // - Type Direct, Value direct: ==> pointers, unsafe.Pointer, func, chan, map
+// //
+// // TRANSLATES TO:
+// // if typeIndirect { } else if valueIndirect { } else { }
+// //
+// // Since we don't deal with funcs, then "flagNethod" is unset, and can be ignored.
+
+// if _USE_RV_INTERFACE {
+// return rv.Interface()
+// }
+// urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+
+// // if urv.flag&unsafeRvFlagMethod != 0 || urv.flag&unsafeRvFlagKindMask == uintptr(reflect.Interface) {
+// // println("***** IS flag method or interface: delegating to rv.Interface()")
+// // return rv.Interface()
+// // }
+
+// // if urv.flag&unsafeRvFlagKindMask == uintptr(reflect.Interface) {
+// // println("***** IS Interface: delegate to rv.Interface")
+// // return rv.Interface()
+// // }
+// // if urv.flag&unsafeRvFlagKindMask&unsafeRvKindDirectIface == 0 {
+// // if urv.flag&unsafeRvFlagAddr == 0 {
+// // println("***** IS ifaceIndir typ")
+// // // ui := unsafeIntf{word: urv.ptr, typ: urv.typ}
+// // // return *(*interface{})(unsafe.Pointer(&ui))
+// // // return *(*interface{})(unsafe.Pointer(&unsafeIntf{word: urv.ptr, typ: urv.typ}))
+// // }
+// // } else if urv.flag&unsafeRvFlagIndir != 0 {
+// // println("***** IS flagindir")
+// // // return *(*interface{})(unsafe.Pointer(&unsafeIntf{word: *(*unsafe.Pointer)(urv.ptr), typ: urv.typ}))
+// // } else {
+// // println("***** NOT flagindir")
+// // return *(*interface{})(unsafe.Pointer(&unsafeIntf{word: urv.ptr, typ: urv.typ}))
+// // }
+// // println("***** default: delegate to rv.Interface")
+
+// urt := (*unsafeRtype)(unsafe.Pointer(urv.typ))
+// if _UNSAFE_RV_DEBUG {
+// fmt.Printf(">>>> start: %v: ", rv.Type())
+// fmt.Printf("%v - %v\n", *urv, *urt)
+// }
+// if urt.kind&unsafeRvKindDirectIface == 0 {
+// if _UNSAFE_RV_DEBUG {
+// fmt.Printf("**** +ifaceIndir type: %v\n", rv.Type())
+// }
+// // println("***** IS ifaceIndir typ")
+// // if true || urv.flag&unsafeRvFlagAddr == 0 {
+// // // println(" ***** IS NOT addr")
+// return *(*interface{})(unsafe.Pointer(&unsafeIntf{word: urv.ptr, typ: urv.typ}))
+// // }
+// } else if urv.flag&unsafeRvFlagIndir != 0 {
+// if _UNSAFE_RV_DEBUG {
+// fmt.Printf("**** +flagIndir type: %v\n", rv.Type())
+// }
+// // println("***** IS flagindir")
+// return *(*interface{})(unsafe.Pointer(&unsafeIntf{word: *(*unsafe.Pointer)(urv.ptr), typ: urv.typ}))
+// } else {
+// if _UNSAFE_RV_DEBUG {
+// fmt.Printf("**** -flagIndir type: %v\n", rv.Type())
+// }
+// // println("***** NOT flagindir")
+// return *(*interface{})(unsafe.Pointer(&unsafeIntf{word: urv.ptr, typ: urv.typ}))
+// }
+// // println("***** default: delegating to rv.Interface()")
+// // return rv.Interface()
+// }
+
+// var staticM0 = make(map[string]uint64)
+// var staticI0 = (int32)(-5)
+
+// func staticRv2iTest() {
+// i0 := (int32)(-5)
+// m0 := make(map[string]uint16)
+// m0["1"] = 1
+// for _, i := range []interface{}{
+// (int)(7),
+// (uint)(8),
+// (int16)(-9),
+// (uint16)(19),
+// (uintptr)(77),
+// (bool)(true),
+// float32(-32.7),
+// float64(64.9),
+// complex(float32(19), 5),
+// complex(float64(-32), 7),
+// [4]uint64{1, 2, 3, 4},
+// (chan<- int)(nil), // chan,
+// rv2i, // func
+// io.Writer(ioutil.Discard),
+// make(map[string]uint),
+// (map[string]uint)(nil),
+// staticM0,
+// m0,
+// &m0,
+// i0,
+// &i0,
+// &staticI0,
+// &staticM0,
+// []uint32{6, 7, 8},
+// "abc",
+// Raw{},
+// RawExt{},
+// &Raw{},
+// &RawExt{},
+// unsafe.Pointer(&i0),
+// } {
+// i2 := rv2i(reflect.ValueOf(i))
+// eq := reflect.DeepEqual(i, i2)
+// fmt.Printf(">>>> %v == %v? %v\n", i, i2, eq)
+// }
+// // os.Exit(0)
+// }
+
+// func init() {
+// staticRv2iTest()
+// }
+
+// func rv2i(rv reflect.Value) interface{} {
+// if _USE_RV_INTERFACE || rv.Kind() == reflect.Interface || rv.CanAddr() {
+// return rv.Interface()
+// }
+// // var i interface{}
+// // ui := (*unsafeIntf)(unsafe.Pointer(&i))
+// var ui unsafeIntf
+// urv := (*unsafeReflectValue)(unsafe.Pointer(&rv))
+// // fmt.Printf("urv: flag: %b, typ: %b, ptr: %b\n", urv.flag, uintptr(urv.typ), uintptr(urv.ptr))
+// if (urv.flag&unsafeRvFlagKindMask)&unsafeRvKindDirectIface == 0 {
+// if urv.flag&unsafeRvFlagAddr != 0 {
+// println("***** indirect and addressable! Needs typed move - delegate to rv.Interface()")
+// return rv.Interface()
+// }
+// println("****** indirect type/kind")
+// ui.word = urv.ptr
+// } else if urv.flag&unsafeRvFlagIndir != 0 {
+// println("****** unsafe rv flag indir")
+// ui.word = *(*unsafe.Pointer)(urv.ptr)
+// } else {
+// println("****** default: assign prt to word directly")
+// ui.word = urv.ptr
+// }
+// // ui.word = urv.ptr
+// ui.typ = urv.typ
+// // fmt.Printf("(pointers) ui.typ: %p, word: %p\n", ui.typ, ui.word)
+// // fmt.Printf("(binary) ui.typ: %b, word: %b\n", uintptr(ui.typ), uintptr(ui.word))
+// return *(*interface{})(unsafe.Pointer(&ui))
+// // return i
+// }
diff --git a/codec/json.go b/codec/json.go
index 142d5b5..a6af2c8 100644
--- a/codec/json.go
+++ b/codec/json.go
@@ -34,7 +34,6 @@ package codec
import (
"bytes"
"encoding/base64"
- "fmt"
"reflect"
"strconv"
"unicode/utf16"
@@ -44,21 +43,29 @@ import (
//--------------------------------
var (
- jsonLiterals = [...]byte{'t', 'r', 'u', 'e', 'f', 'a', 'l', 's', 'e', 'n', 'u', 'l', 'l'}
+ // jsonLiterals = [...]byte{'t', 'r', 'u', 'e', 'f', 'a', 'l', 's', 'e', 'n', 'u', 'l', 'l'}
- jsonFloat64Pow10 = [...]float64{
- 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
- 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
- 1e20, 1e21, 1e22,
- }
+ // jsonFloat64Pow10 = [...]float64{
+ // 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
+ // 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
+ // 1e20, 1e21, 1e22,
+ // }
- jsonUint64Pow10 = [...]uint64{
- 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
- 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
- }
+ // jsonUint64Pow10 = [...]uint64{
+ // 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
+ // 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
+ // }
// jsonTabs and jsonSpaces are used as caches for indents
jsonTabs, jsonSpaces string
+
+ jsonCharHtmlSafeSet bitset128
+ jsonCharSafeSet bitset128
+ jsonCharWhitespaceSet bitset256
+ jsonNumSet bitset256
+ // jsonIsFloatSet bitset256
+
+ jsonU4Set [256]byte
)
const (
@@ -78,20 +85,9 @@ const (
// P.S. Do not expect a significant decoding boost from this.
jsonValidateSymbols = true
- // if jsonTruncateMantissa, truncate mantissa if trailing 0's.
- // This is important because it could allow some floats to be decoded without
- // deferring to strconv.ParseFloat.
- jsonTruncateMantissa = true
-
- // if mantissa >= jsonNumUintCutoff before multiplying by 10, this is an overflow
- jsonNumUintCutoff = (1<<64-1)/uint64(10) + 1 // cutoff64(base)
-
- // if mantissa >= jsonNumUintMaxVal, this is an overflow
- jsonNumUintMaxVal = 1<<uint64(64) - 1
-
- // jsonNumDigitsUint64Largest = 19
-
jsonSpacesOrTabsLen = 128
+
+ jsonU4SetErrVal = 128
)
func init() {
@@ -105,6 +101,46 @@ func init() {
bs[i] = '\t'
}
jsonTabs = string(bs[:])
+
+ // populate the safe values as true: note: ASCII control characters are (0-31)
+ // jsonCharSafeSet: all true except (0-31) " \
+ // jsonCharHtmlSafeSet: all true except (0-31) " \ < > &
+ var i byte
+ for i = 32; i < utf8.RuneSelf; i++ {
+ switch i {
+ case '"', '\\':
+ case '<', '>', '&':
+ jsonCharSafeSet.set(i) // = true
+ default:
+ jsonCharSafeSet.set(i)
+ jsonCharHtmlSafeSet.set(i)
+ }
+ }
+ for i = 0; i <= utf8.RuneSelf; i++ {
+ switch i {
+ case ' ', '\t', '\r', '\n':
+ jsonCharWhitespaceSet.set(i)
+ case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'e', 'E', '.', '+', '-':
+ jsonNumSet.set(i)
+ }
+ }
+ for j := range jsonU4Set {
+ switch i = byte(j); i {
+ case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
+ jsonU4Set[i] = i - '0'
+ case 'a', 'b', 'c', 'd', 'e', 'f':
+ jsonU4Set[i] = i - 'a' + 10
+ case 'A', 'B', 'C', 'D', 'E', 'F':
+ jsonU4Set[i] = i - 'A' + 10
+ default:
+ jsonU4Set[i] = jsonU4SetErrVal
+ }
+ // switch i = byte(j); i {
+ // case 'e', 'E', '.':
+ // jsonIsFloatSet.set(i)
+ // }
+ }
+ // jsonU4Set[255] = jsonU4SetErrVal
}
type jsonEncDriver struct {
@@ -127,48 +163,116 @@ type jsonEncDriver struct {
// - newline and indent are added before each ending,
// except there was no entry (so we can have {} or [])
-func (e *jsonEncDriver) sendContainerState(c containerState) {
- // determine whether to output separators
- if c == containerMapKey {
- if e.c != containerMapStart {
- e.w.writen1(',')
- }
- if e.d {
- e.writeIndent()
- }
- } else if c == containerMapValue {
- if e.d {
- e.w.writen2(':', ' ')
- } else {
- e.w.writen1(':')
- }
- } else if c == containerMapEnd {
- if e.d {
- e.dl--
- if e.c != containerMapStart {
- e.writeIndent()
- }
- }
- e.w.writen1('}')
- } else if c == containerArrayElem {
+func (e *jsonEncDriver) WriteArrayStart(length int) {
+ if e.d {
+ e.dl++
+ }
+ e.w.writen1('[')
+ e.c = containerArrayStart
+}
+
+func (e *jsonEncDriver) WriteArrayElem() {
+ if e.c != containerArrayStart {
+ e.w.writen1(',')
+ }
+ if e.d {
+ e.writeIndent()
+ }
+ e.c = containerArrayElem
+}
+
+func (e *jsonEncDriver) WriteArrayEnd() {
+ if e.d {
+ e.dl--
if e.c != containerArrayStart {
- e.w.writen1(',')
- }
- if e.d {
e.writeIndent()
}
- } else if c == containerArrayEnd {
- if e.d {
- e.dl--
- if e.c != containerArrayStart {
- e.writeIndent()
- }
+ }
+ e.w.writen1(']')
+ e.c = containerArrayEnd
+}
+
+func (e *jsonEncDriver) WriteMapStart(length int) {
+ if e.d {
+ e.dl++
+ }
+ e.w.writen1('{')
+ e.c = containerMapStart
+}
+
+func (e *jsonEncDriver) WriteMapElemKey() {
+ if e.c != containerMapStart {
+ e.w.writen1(',')
+ }
+ if e.d {
+ e.writeIndent()
+ }
+ e.c = containerMapKey
+}
+
+func (e *jsonEncDriver) WriteMapElemValue() {
+ if e.d {
+ e.w.writen2(':', ' ')
+ } else {
+ e.w.writen1(':')
+ }
+ e.c = containerMapValue
+}
+
+func (e *jsonEncDriver) WriteMapEnd() {
+ if e.d {
+ e.dl--
+ if e.c != containerMapStart {
+ e.writeIndent()
}
- e.w.writen1(']')
}
- e.c = c
+ e.w.writen1('}')
+ e.c = containerMapEnd
}
+// func (e *jsonEncDriver) sendContainerState(c containerState) {
+// // determine whether to output separators
+// switch c {
+// case containerMapKey:
+// if e.c != containerMapStart {
+// e.w.writen1(',')
+// }
+// if e.d {
+// e.writeIndent()
+// }
+// case containerMapValue:
+// if e.d {
+// e.w.writen2(':', ' ')
+// } else {
+// e.w.writen1(':')
+// }
+// case containerMapEnd:
+// if e.d {
+// e.dl--
+// if e.c != containerMapStart {
+// e.writeIndent()
+// }
+// }
+// e.w.writen1('}')
+// case containerArrayElem:
+// if e.c != containerArrayStart {
+// e.w.writen1(',')
+// }
+// if e.d {
+// e.writeIndent()
+// }
+// case containerArrayEnd:
+// if e.d {
+// e.dl--
+// if e.c != containerArrayStart {
+// e.writeIndent()
+// }
+// }
+// e.w.writen1(']')
+// }
+// e.c = c
+// }
+
func (e *jsonEncDriver) writeIndent() {
e.w.writen1('\n')
if x := len(e.ds) * int(e.dl); x <= jsonSpacesOrTabsLen {
@@ -185,37 +289,57 @@ func (e *jsonEncDriver) writeIndent() {
}
func (e *jsonEncDriver) EncodeNil() {
- e.w.writeb(jsonLiterals[9:13]) // null
+ e.w.writen4('n', 'u', 'l', 'l') // e.w.writeb(jsonLiterals[9:13]) // null
}
func (e *jsonEncDriver) EncodeBool(b bool) {
if b {
- e.w.writeb(jsonLiterals[0:4]) // true
+ e.w.writen4('t', 'r', 'u', 'e') // e.w.writeb(jsonLiterals[0:4]) // true
} else {
- e.w.writeb(jsonLiterals[4:9]) // false
+ e.w.writen5('f', 'a', 'l', 's', 'e') // e.w.writeb(jsonLiterals[4:9]) // false
}
}
func (e *jsonEncDriver) EncodeFloat32(f float32) {
- e.w.writeb(strconv.AppendFloat(e.b[:0], float64(f), 'E', -1, 32))
+ e.encodeFloat(float64(f), 32)
}
func (e *jsonEncDriver) EncodeFloat64(f float64) {
- // e.w.writestr(strconv.FormatFloat(f, 'E', -1, 64))
- e.w.writeb(strconv.AppendFloat(e.b[:0], f, 'E', -1, 64))
+ e.encodeFloat(f, 64)
+}
+
+func (e *jsonEncDriver) encodeFloat(f float64, numbits int) {
+ x := strconv.AppendFloat(e.b[:0], f, 'G', -1, numbits)
+ // if bytes.IndexByte(x, 'E') == -1 && bytes.IndexByte(x, '.') == -1 {
+ if !jsonIsFloatBytesB2(x) {
+ x = append(x, '.', '0')
+ }
+ e.w.writeb(x)
}
func (e *jsonEncDriver) EncodeInt(v int64) {
+ if x := e.h.IntegerAsString; x == 'A' || x == 'L' && (v > 1<<53 || v < -(1<<53)) {
+ e.w.writen1('"')
+ e.w.writeb(strconv.AppendInt(e.b[:0], v, 10))
+ e.w.writen1('"')
+ return
+ }
e.w.writeb(strconv.AppendInt(e.b[:0], v, 10))
}
func (e *jsonEncDriver) EncodeUint(v uint64) {
+ if x := e.h.IntegerAsString; x == 'A' || x == 'L' && v > 1<<53 {
+ e.w.writen1('"')
+ e.w.writeb(strconv.AppendUint(e.b[:0], v, 10))
+ e.w.writen1('"')
+ return
+ }
e.w.writeb(strconv.AppendUint(e.b[:0], v, 10))
}
func (e *jsonEncDriver) EncodeExt(rv interface{}, xtag uint64, ext Ext, en *Encoder) {
if v := ext.ConvertExt(rv); v == nil {
- e.w.writeb(jsonLiterals[9:13]) // null // e.EncodeNil()
+ e.w.writen4('n', 'u', 'l', 'l') // e.w.writeb(jsonLiterals[9:13]) // null // e.EncodeNil()
} else {
en.encode(v)
}
@@ -224,35 +348,17 @@ func (e *jsonEncDriver) EncodeExt(rv interface{}, xtag uint64, ext Ext, en *Enco
func (e *jsonEncDriver) EncodeRawExt(re *RawExt, en *Encoder) {
// only encodes re.Value (never re.Data)
if re.Value == nil {
- e.w.writeb(jsonLiterals[9:13]) // null // e.EncodeNil()
+ e.w.writen4('n', 'u', 'l', 'l') // e.w.writeb(jsonLiterals[9:13]) // null // e.EncodeNil()
} else {
en.encode(re.Value)
}
}
-func (e *jsonEncDriver) EncodeArrayStart(length int) {
- if e.d {
- e.dl++
- }
- e.w.writen1('[')
- e.c = containerArrayStart
-}
-
-func (e *jsonEncDriver) EncodeMapStart(length int) {
- if e.d {
- e.dl++
- }
- e.w.writen1('{')
- e.c = containerMapStart
-}
-
func (e *jsonEncDriver) EncodeString(c charEncoding, v string) {
- // e.w.writestr(strconv.Quote(v))
e.quoteStr(v)
}
func (e *jsonEncDriver) EncodeSymbol(v string) {
- // e.EncodeString(c_UTF8, v)
e.quoteStr(v)
}
@@ -274,7 +380,6 @@ func (e *jsonEncDriver) EncodeStringBytes(c charEncoding, v []byte) {
e.w.writeb(e.bs)
e.w.writen1('"')
} else {
- // e.EncodeString(c, string(v))
e.quoteStr(stringView(v))
}
}
@@ -288,10 +393,13 @@ func (e *jsonEncDriver) quoteStr(s string) {
const hex = "0123456789abcdef"
w := e.w
w.writen1('"')
- start := 0
- for i := 0; i < len(s); {
+ var start int
+ for i, slen := 0, len(s); i < slen; {
+ // encode all bytes < 0x20 (except \r, \n).
+ // also encode < > & to prevent security holes when served to some browsers.
if b := s[i]; b < utf8.RuneSelf {
- if 0x20 <= b && b != '\\' && b != '"' && b != '<' && b != '>' && b != '&' {
+ // if 0x20 <= b && b != '\\' && b != '"' && b != '<' && b != '>' && b != '&' {
+ if jsonCharHtmlSafeSet.isset(b) || (e.h.HTMLCharsAsIs && jsonCharSafeSet.isset(b)) {
i++
continue
}
@@ -312,8 +420,6 @@ func (e *jsonEncDriver) quoteStr(s string) {
case '\t':
w.writen2('\\', 't')
default:
- // encode all bytes < 0x20 (except \r, \n).
- // also encode < > & to prevent security holes when served to some browsers.
w.writestr(`\u00`)
w.writen2(hex[b>>4], hex[b&0xF])
}
@@ -332,7 +438,7 @@ func (e *jsonEncDriver) quoteStr(s string) {
continue
}
// U+2028 is LINE SEPARATOR. U+2029 is PARAGRAPH SEPARATOR.
- // Both technically valid JSON, but bomb on JSONP, so fix here.
+ // Both technically valid JSON, but bomb on JSONP, so fix here unconditionally.
if c == '\u2028' || c == '\u2029' {
if start < i {
w.writestr(s[start:i])
@@ -351,86 +457,14 @@ func (e *jsonEncDriver) quoteStr(s string) {
w.writen1('"')
}
-//--------------------------------
-
-type jsonNum struct {
- // bytes []byte // may have [+-.eE0-9]
- mantissa uint64 // where mantissa ends, and maybe dot begins.
- exponent int16 // exponent value.
- manOverflow bool
- neg bool // started with -. No initial sign in the bytes above.
- dot bool // has dot
- explicitExponent bool // explicit exponent
-}
-
-func (x *jsonNum) reset() {
- x.manOverflow = false
- x.neg = false
- x.dot = false
- x.explicitExponent = false
- x.mantissa = 0
- x.exponent = 0
-}
-
-// uintExp is called only if exponent > 0.
-func (x *jsonNum) uintExp() (n uint64, overflow bool) {
- n = x.mantissa
- e := x.exponent
- if e >= int16(len(jsonUint64Pow10)) {
- overflow = true
- return
- }
- n *= jsonUint64Pow10[e]
- if n < x.mantissa || n > jsonNumUintMaxVal {
- overflow = true
- return
- }
- return
- // for i := int16(0); i < e; i++ {
- // if n >= jsonNumUintCutoff {
- // overflow = true
- // return
- // }
- // n *= 10
- // }
- // return
-}
-
-// these constants are only used withn floatVal.
-// They are brought out, so that floatVal can be inlined.
-const (
- jsonUint64MantissaBits = 52
- jsonMaxExponent = int16(len(jsonFloat64Pow10)) - 1
-)
-
-func (x *jsonNum) floatVal() (f float64, parseUsingStrConv bool) {
- // We do not want to lose precision.
- // Consequently, we will delegate to strconv.ParseFloat if any of the following happen:
- // - There are more digits than in math.MaxUint64: 18446744073709551615 (20 digits)
- // We expect up to 99.... (19 digits)
- // - The mantissa cannot fit into a 52 bits of uint64
- // - The exponent is beyond our scope ie beyong 22.
- parseUsingStrConv = x.manOverflow ||
- x.exponent > jsonMaxExponent ||
- (x.exponent < 0 && -(x.exponent) > jsonMaxExponent) ||
- x.mantissa>>jsonUint64MantissaBits != 0
-
- if parseUsingStrConv {
- return
- }
-
- // all good. so handle parse here.
- f = float64(x.mantissa)
- // fmt.Printf(".Float: uint64 value: %v, float: %v\n", m, f)
- if x.neg {
- f = -f
- }
- if x.exponent > 0 {
- f *= jsonFloat64Pow10[x.exponent]
- } else if x.exponent < 0 {
- f /= jsonFloat64Pow10[-x.exponent]
+func (e *jsonEncDriver) atEndOfEncode() {
+ if e.h.TermWhitespace {
+ if e.d {
+ e.w.writen1('\n')
+ } else {
+ e.w.writen1(' ')
+ }
}
- return
}
type jsonDecDriver struct {
@@ -443,6 +477,8 @@ type jsonDecDriver struct {
// tok is used to store the token read right after skipWhiteSpace.
tok uint8
+ fnull bool // found null from appendStringAsBytes
+
bstr [8]byte // scratch used for string \UXXX parsing
b [64]byte // scratch, used for parsing strings or numbers
b2 [64]byte // scratch, used only for decodeBytes (after base64)
@@ -450,26 +486,14 @@ type jsonDecDriver struct {
se setExtWrapper
- n jsonNum
+ // n jsonNum
}
func jsonIsWS(b byte) bool {
- return b == ' ' || b == '\t' || b == '\r' || b == '\n'
+ // return b == ' ' || b == '\t' || b == '\r' || b == '\n'
+ return jsonCharWhitespaceSet.isset(b)
}
-// // This will skip whitespace characters and return the next byte to read.
-// // The next byte determines what the value will be one of.
-// func (d *jsonDecDriver) skipWhitespace() {
-// // fast-path: do not enter loop. Just check first (in case no whitespace).
-// b := d.r.readn1()
-// if jsonIsWS(b) {
-// r := d.r
-// for b = r.readn1(); jsonIsWS(b); b = r.readn1() {
-// }
-// }
-// d.tok = b
-// }
-
func (d *jsonDecDriver) uncacheRead() {
if d.tok != 0 {
d.r.unreadn1()
@@ -477,75 +501,177 @@ func (d *jsonDecDriver) uncacheRead() {
}
}
-func (d *jsonDecDriver) sendContainerState(c containerState) {
+func (d *jsonDecDriver) ReadMapStart() int {
if d.tok == 0 {
- var b byte
- r := d.r
- for b = r.readn1(); jsonIsWS(b); b = r.readn1() {
- }
- d.tok = b
+ d.tok = d.r.skip(&jsonCharWhitespaceSet)
}
- var xc uint8 // char expected
- if c == containerMapKey {
- if d.c != containerMapStart {
- xc = ','
- }
- } else if c == containerMapValue {
- xc = ':'
- } else if c == containerMapEnd {
- xc = '}'
- } else if c == containerArrayElem {
- if d.c != containerArrayStart {
- xc = ','
- }
- } else if c == containerArrayEnd {
- xc = ']'
+ if d.tok != '{' {
+ d.d.errorf("json: expect char '%c' but got char '%c'", '{', d.tok)
+ }
+ d.tok = 0
+ d.c = containerMapStart
+ return -1
+}
+
+func (d *jsonDecDriver) ReadArrayStart() int {
+ if d.tok == 0 {
+ d.tok = d.r.skip(&jsonCharWhitespaceSet)
+ }
+ if d.tok != '[' {
+ d.d.errorf("json: expect char '%c' but got char '%c'", '[', d.tok)
+ }
+ d.tok = 0
+ d.c = containerArrayStart
+ return -1
+}
+
+func (d *jsonDecDriver) CheckBreak() bool {
+ if d.tok == 0 {
+ d.tok = d.r.skip(&jsonCharWhitespaceSet)
+ }
+ return d.tok == '}' || d.tok == ']'
+}
+
+func (d *jsonDecDriver) ReadArrayElem() {
+ if d.tok == 0 {
+ d.tok = d.r.skip(&jsonCharWhitespaceSet)
}
- if xc != 0 {
+ if d.c != containerArrayStart {
+ const xc uint8 = ','
if d.tok != xc {
d.d.errorf("json: expect char '%c' but got char '%c'", xc, d.tok)
}
d.tok = 0
}
- d.c = c
+ d.c = containerArrayElem
}
-func (d *jsonDecDriver) CheckBreak() bool {
+func (d *jsonDecDriver) ReadArrayEnd() {
+ if d.tok == 0 {
+ d.tok = d.r.skip(&jsonCharWhitespaceSet)
+ }
+ const xc uint8 = ']'
+ if d.tok != xc {
+ d.d.errorf("json: expect char '%c' but got char '%c'", xc, d.tok)
+ }
+ d.tok = 0
+ d.c = containerArrayEnd
+}
+
+func (d *jsonDecDriver) ReadMapElemKey() {
if d.tok == 0 {
- var b byte
- r := d.r
- for b = r.readn1(); jsonIsWS(b); b = r.readn1() {
+ d.tok = d.r.skip(&jsonCharWhitespaceSet)
+ }
+ if d.c != containerMapStart {
+ const xc uint8 = ','
+ if d.tok != xc {
+ d.d.errorf("json: expect char '%c' but got char '%c'", xc, d.tok)
}
- d.tok = b
+ d.tok = 0
}
- if d.tok == '}' || d.tok == ']' {
- // d.tok = 0 // only checking, not consuming
- return true
+ d.c = containerMapKey
+}
+
+func (d *jsonDecDriver) ReadMapElemValue() {
+ if d.tok == 0 {
+ d.tok = d.r.skip(&jsonCharWhitespaceSet)
}
- return false
+ const xc uint8 = ':'
+ if d.tok != xc {
+ d.d.errorf("json: expect char '%c' but got char '%c'", xc, d.tok)
+ }
+ d.tok = 0
+ d.c = containerMapValue
}
-func (d *jsonDecDriver) readStrIdx(fromIdx, toIdx uint8) {
- bs := d.r.readx(int(toIdx - fromIdx))
+func (d *jsonDecDriver) ReadMapEnd() {
+ if d.tok == 0 {
+ d.tok = d.r.skip(&jsonCharWhitespaceSet)
+ }
+ const xc uint8 = '}'
+ if d.tok != xc {
+ d.d.errorf("json: expect char '%c' but got char '%c'", xc, d.tok)
+ }
d.tok = 0
- if jsonValidateSymbols {
- if !bytes.Equal(bs, jsonLiterals[fromIdx:toIdx]) {
- d.d.errorf("json: expecting %s: got %s", jsonLiterals[fromIdx:toIdx], bs)
- return
- }
+ d.c = containerMapEnd
+}
+
+// func (d *jsonDecDriver) readContainerState(c containerState, xc uint8, check bool) {
+// if d.tok == 0 {
+// d.tok = d.r.skip(&jsonCharWhitespaceSet)
+// }
+// if check {
+// if d.tok != xc {
+// d.d.errorf("json: expect char '%c' but got char '%c'", xc, d.tok)
+// }
+// d.tok = 0
+// }
+// d.c = c
+// }
+
+// func (d *jsonDecDriver) sendContainerState(c containerState) {
+// if d.tok == 0 {
+// d.tok = d.r.skip(&jsonCharWhitespaceSet)
+// }
+// var xc uint8 // char expected
+// switch c {
+// case containerMapKey:
+// if d.c != containerMapStart {
+// xc = ','
+// }
+// case containerMapValue:
+// xc = ':'
+// case containerMapEnd:
+// xc = '}'
+// case containerArrayElem:
+// if d.c != containerArrayStart {
+// xc = ','
+// }
+// case containerArrayEnd:
+// xc = ']'
+// }
+// if xc != 0 {
+// if d.tok != xc {
+// d.d.errorf("json: expect char '%c' but got char '%c'", xc, d.tok)
+// }
+// d.tok = 0
+// }
+// d.c = c
+// }
+
+// func (d *jsonDecDriver) readLiteralIdx(fromIdx, toIdx uint8) {
+// bs := d.r.readx(int(toIdx - fromIdx))
+// d.tok = 0
+// if jsonValidateSymbols && !bytes.Equal(bs, jsonLiterals[fromIdx:toIdx]) {
+// d.d.errorf("json: expecting %s: got %s", jsonLiterals[fromIdx:toIdx], bs)
+// return
+// }
+// }
+
+func (d *jsonDecDriver) readSymbol3(v1, v2, v3 uint8) {
+ b1, b2, b3 := d.r.readn3()
+ d.tok = 0
+ if jsonValidateSymbols && (b1 != v1 || b2 != v2 || b3 != v3) {
+ d.d.errorf("json: expecting %c, %c, %c: got %c, %c, %c", b1, b2, b3, v1, v2, v3)
+ return
+ }
+}
+
+func (d *jsonDecDriver) readSymbol4(v1, v2, v3, v4 uint8) {
+ b1, b2, b3, b4 := d.r.readn4()
+ d.tok = 0
+ if jsonValidateSymbols && (b1 != v1 || b2 != v2 || b3 != v3 || b4 != v4) {
+ d.d.errorf("json: expecting %c, %c, %c, %c: got %c, %c, %c, %c", b1, b2, b3, b4, v1, v2, v3, v4)
+ return
}
}
func (d *jsonDecDriver) TryDecodeAsNil() bool {
if d.tok == 0 {
- var b byte
- r := d.r
- for b = r.readn1(); jsonIsWS(b); b = r.readn1() {
- }
- d.tok = b
+ d.tok = d.r.skip(&jsonCharWhitespaceSet)
}
if d.tok == 'n' {
- d.readStrIdx(10, 13) // ull
+ d.readSymbol3('u', 'l', 'l') // d.readLiteralIdx(10, 13) // ull
return true
}
return false
@@ -553,64 +679,24 @@ func (d *jsonDecDriver) TryDecodeAsNil() bool {
func (d *jsonDecDriver) DecodeBool() bool {
if d.tok == 0 {
- var b byte
- r := d.r
- for b = r.readn1(); jsonIsWS(b); b = r.readn1() {
- }
- d.tok = b
+ d.tok = d.r.skip(&jsonCharWhitespaceSet)
}
if d.tok == 'f' {
- d.readStrIdx(5, 9) // alse
+ d.readSymbol4('a', 'l', 's', 'e') // d.readLiteralIdx(5, 9) // alse
return false
}
if d.tok == 't' {
- d.readStrIdx(1, 4) // rue
+ d.readSymbol3('r', 'u', 'e') // d.readLiteralIdx(1, 4) // rue
return true
}
d.d.errorf("json: decode bool: got first char %c", d.tok)
return false // "unreachable"
}
-func (d *jsonDecDriver) ReadMapStart() int {
- if d.tok == 0 {
- var b byte
- r := d.r
- for b = r.readn1(); jsonIsWS(b); b = r.readn1() {
- }
- d.tok = b
- }
- if d.tok != '{' {
- d.d.errorf("json: expect char '%c' but got char '%c'", '{', d.tok)
- }
- d.tok = 0
- d.c = containerMapStart
- return -1
-}
-
-func (d *jsonDecDriver) ReadArrayStart() int {
- if d.tok == 0 {
- var b byte
- r := d.r
- for b = r.readn1(); jsonIsWS(b); b = r.readn1() {
- }
- d.tok = b
- }
- if d.tok != '[' {
- d.d.errorf("json: expect char '%c' but got char '%c'", '[', d.tok)
- }
- d.tok = 0
- d.c = containerArrayStart
- return -1
-}
-
func (d *jsonDecDriver) ContainerType() (vt valueType) {
// check container type by checking the first char
if d.tok == 0 {
- var b byte
- r := d.r
- for b = r.readn1(); jsonIsWS(b); b = r.readn1() {
- }
- d.tok = b
+ d.tok = d.r.skip(&jsonCharWhitespaceSet)
}
if b := d.tok; b == '{' {
return valueTypeMap
@@ -626,243 +712,51 @@ func (d *jsonDecDriver) ContainerType() (vt valueType) {
// return false // "unreachable"
}
-func (d *jsonDecDriver) decNum(storeBytes bool) {
- // If it is has a . or an e|E, decode as a float; else decode as an int.
+func (d *jsonDecDriver) decNumBytes() (bs []byte) {
+ // stores num bytes in d.bs
if d.tok == 0 {
- var b byte
- r := d.r
- for b = r.readn1(); jsonIsWS(b); b = r.readn1() {
- }
- d.tok = b
+ d.tok = d.r.skip(&jsonCharWhitespaceSet)
}
- b := d.tok
- if !(b == '+' || b == '-' || b == '.' || (b >= '0' && b <= '9')) {
- d.d.errorf("json: decNum: got first char '%c'", b)
- return
+ if d.tok == '"' {
+ bs = d.r.readUntil(d.b2[:0], '"')
+ bs = bs[:len(bs)-1]
+ } else {
+ d.r.unreadn1()
+ bs = d.r.readTo(d.bs[:0], &jsonNumSet)
}
d.tok = 0
-
- const cutoff = (1<<64-1)/uint64(10) + 1 // cutoff64(base)
- const jsonNumUintMaxVal = 1<<uint64(64) - 1
-
- n := &d.n
- r := d.r
- n.reset()
- d.bs = d.bs[:0]
-
- // The format of a number is as below:
- // parsing: sign? digit* dot? digit* e? sign? digit*
- // states: 0 1* 2 3* 4 5* 6 7
- // We honor this state so we can break correctly.
- var state uint8 = 0
- var eNeg bool
- var e int16
- var eof bool
-LOOP:
- for !eof {
- // fmt.Printf("LOOP: b: %q\n", b)
- switch b {
- case '+':
- switch state {
- case 0:
- state = 2
- // do not add sign to the slice ...
- b, eof = r.readn1eof()
- continue
- case 6: // typ = jsonNumFloat
- state = 7
- default:
- break LOOP
- }
- case '-':
- switch state {
- case 0:
- state = 2
- n.neg = true
- // do not add sign to the slice ...
- b, eof = r.readn1eof()
- continue
- case 6: // typ = jsonNumFloat
- eNeg = true
- state = 7
- default:
- break LOOP
- }
- case '.':
- switch state {
- case 0, 2: // typ = jsonNumFloat
- state = 4
- n.dot = true
- default:
- break LOOP
- }
- case 'e', 'E':
- switch state {
- case 0, 2, 4: // typ = jsonNumFloat
- state = 6
- // n.mantissaEndIndex = int16(len(n.bytes))
- n.explicitExponent = true
- default:
- break LOOP
- }
- case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
- switch state {
- case 0:
- state = 2
- fallthrough
- case 2:
- fallthrough
- case 4:
- if n.dot {
- n.exponent--
- }
- if n.mantissa >= jsonNumUintCutoff {
- n.manOverflow = true
- break
- }
- v := uint64(b - '0')
- n.mantissa *= 10
- if v != 0 {
- n1 := n.mantissa + v
- if n1 < n.mantissa || n1 > jsonNumUintMaxVal {
- n.manOverflow = true // n+v overflows
- break
- }
- n.mantissa = n1
- }
- case 6:
- state = 7
- fallthrough
- case 7:
- if !(b == '0' && e == 0) {
- e = e*10 + int16(b-'0')
- }
- default:
- break LOOP
- }
- default:
- break LOOP
- }
- if storeBytes {
- d.bs = append(d.bs, b)
- }
- b, eof = r.readn1eof()
- }
-
- if jsonTruncateMantissa && n.mantissa != 0 {
- for n.mantissa%10 == 0 {
- n.mantissa /= 10
- n.exponent++
- }
- }
-
- if e != 0 {
- if eNeg {
- n.exponent -= e
- } else {
- n.exponent += e
- }
- }
-
- // d.n = n
-
- if !eof {
- if jsonUnreadAfterDecNum {
- r.unreadn1()
- } else {
- if !jsonIsWS(b) {
- d.tok = b
- }
- }
- }
- // fmt.Printf("1: n: bytes: %s, neg: %v, dot: %v, exponent: %v, mantissaEndIndex: %v\n",
- // n.bytes, n.neg, n.dot, n.exponent, n.mantissaEndIndex)
- return
+ return bs
}
-func (d *jsonDecDriver) DecodeInt(bitsize uint8) (i int64) {
- d.decNum(false)
- n := &d.n
- if n.manOverflow {
- d.d.errorf("json: overflow integer after: %v", n.mantissa)
- return
- }
- var u uint64
- if n.exponent == 0 {
- u = n.mantissa
- } else if n.exponent < 0 {
- d.d.errorf("json: fractional integer")
- return
- } else if n.exponent > 0 {
- var overflow bool
- if u, overflow = n.uintExp(); overflow {
- d.d.errorf("json: overflow integer")
- return
- }
- }
- i = int64(u)
- if n.neg {
- i = -i
- }
- if chkOvf.Int(i, bitsize) {
- d.d.errorf("json: overflow %v bits: %s", bitsize, d.bs)
+func (d *jsonDecDriver) DecodeUint(bitsize uint8) (u uint64) {
+ bs := d.decNumBytes()
+ u, err := strconv.ParseUint(stringView(bs), 10, int(bitsize))
+ if err != nil {
+ d.d.errorf("json: decode uint from %s: %v", bs, err)
return
}
- // fmt.Printf("DecodeInt: %v\n", i)
- return
-}
-
-// floatVal MUST only be called after a decNum, as d.bs now contains the bytes of the number
-func (d *jsonDecDriver) floatVal() (f float64) {
- f, useStrConv := d.n.floatVal()
- if useStrConv {
- var err error
- if f, err = strconv.ParseFloat(stringView(d.bs), 64); err != nil {
- panic(fmt.Errorf("parse float: %s, %v", d.bs, err))
- }
- if d.n.neg {
- f = -f
- }
- }
return
}
-func (d *jsonDecDriver) DecodeUint(bitsize uint8) (u uint64) {
- d.decNum(false)
- n := &d.n
- if n.neg {
- d.d.errorf("json: unsigned integer cannot be negative")
- return
- }
- if n.manOverflow {
- d.d.errorf("json: overflow integer after: %v", n.mantissa)
- return
- }
- if n.exponent == 0 {
- u = n.mantissa
- } else if n.exponent < 0 {
- d.d.errorf("json: fractional integer")
- return
- } else if n.exponent > 0 {
- var overflow bool
- if u, overflow = n.uintExp(); overflow {
- d.d.errorf("json: overflow integer")
- return
- }
- }
- if chkOvf.Uint(u, bitsize) {
- d.d.errorf("json: overflow %v bits: %s", bitsize, d.bs)
+func (d *jsonDecDriver) DecodeInt(bitsize uint8) (i int64) {
+ bs := d.decNumBytes()
+ i, err := strconv.ParseInt(stringView(bs), 10, int(bitsize))
+ if err != nil {
+ d.d.errorf("json: decode int from %s: %v", bs, err)
return
}
- // fmt.Printf("DecodeUint: %v\n", u)
return
}
func (d *jsonDecDriver) DecodeFloat(chkOverflow32 bool) (f float64) {
- d.decNum(true)
- f = d.floatVal()
- if chkOverflow32 && chkOvf.Float32(f) {
- d.d.errorf("json: overflow float32: %v, %s", f, d.bs)
+ bs := d.decNumBytes()
+ bitsize := 64
+ if chkOverflow32 {
+ bitsize = 32
+ }
+ f, err := strconv.ParseFloat(stringView(bs), bitsize)
+ if err != nil {
+ d.d.errorf("json: decode float from %s: %v", bs, err)
return
}
return
@@ -881,18 +775,23 @@ func (d *jsonDecDriver) DecodeExt(rv interface{}, xtag uint64, ext Ext) (realxta
return
}
-func (d *jsonDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) {
+func (d *jsonDecDriver) DecodeBytes(bs []byte, zerocopy bool) (bsOut []byte) {
// if decoding into raw bytes, and the RawBytesExt is configured, use it to decode.
- if !isstring && d.se.i != nil {
+ if d.se.i != nil {
bsOut = bs
d.DecodeExt(&bsOut, 0, &d.se)
return
}
d.appendStringAsBytes()
- // if isstring, then just return the bytes, even if it is using the scratch buffer.
- // the bytes will be converted to a string as needed.
- if isstring {
- return d.bs
+ // base64 encodes []byte{} as "", and we encode nil []byte as null.
+ // Consequently, base64 should decode null as a nil []byte, and "" as an empty []byte{}.
+ // appendStringAsBytes returns a zero-len slice for both, so as not to reset d.bs.
+ // However, it sets a fnull field to true, so we can check if a null was found.
+ if len(d.bs) == 0 {
+ if d.fnull {
+ return nil
+ }
+ return []byte{}
}
bs0 := d.bs
slen := base64.StdEncoding.DecodedLen(len(bs0))
@@ -914,166 +813,213 @@ func (d *jsonDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut [
return
}
+const jsonAlwaysReturnInternString = false
+
func (d *jsonDecDriver) DecodeString() (s string) {
d.appendStringAsBytes()
// if x := d.s.sc; x != nil && x.so && x.st == '}' { // map key
- if d.c == containerMapKey {
+ if jsonAlwaysReturnInternString || d.c == containerMapKey {
return d.d.string(d.bs)
}
return string(d.bs)
}
+func (d *jsonDecDriver) DecodeStringAsBytes() (s []byte) {
+ d.appendStringAsBytes()
+ return d.bs
+}
+
func (d *jsonDecDriver) appendStringAsBytes() {
if d.tok == 0 {
- var b byte
- r := d.r
- for b = r.readn1(); jsonIsWS(b); b = r.readn1() {
- }
- d.tok = b
+ d.tok = d.r.skip(&jsonCharWhitespaceSet)
}
+
+ d.fnull = false
if d.tok != '"' {
- d.d.errorf("json: expect char '%c' but got char '%c'", '"', d.tok)
+ // d.d.errorf("json: expect char '%c' but got char '%c'", '"', d.tok)
+ // handle non-string scalar: null, true, false or a number
+ switch d.tok {
+ case 'n':
+ d.readSymbol3('u', 'l', 'l') // d.readLiteralIdx(10, 13) // ull
+ d.bs = d.bs[:0]
+ d.fnull = true
+ case 'f':
+ d.readSymbol4('a', 'l', 's', 'e') // d.readLiteralIdx(5, 9) // alse
+ d.bs = d.bs[:5]
+ copy(d.bs, "false")
+ case 't':
+ d.readSymbol3('r', 'u', 'e') // d.readLiteralIdx(1, 4) // rue
+ d.bs = d.bs[:4]
+ copy(d.bs, "true")
+ default:
+ // try to parse a valid number
+ bs := d.decNumBytes()
+ d.bs = d.bs[:len(bs)]
+ copy(d.bs, bs)
+ }
+ return
}
- d.tok = 0
- v := d.bs[:0]
- var c uint8
+ d.tok = 0
r := d.r
- for {
- c = r.readn1()
+ var cs = r.readUntil(d.b2[:0], '"')
+ var cslen = len(cs)
+ var c uint8
+ v := d.bs[:0]
+ // append on each byte seen can be expensive, so we just
+ // keep track of where we last read a contiguous set of
+ // non-special bytes (using cursor variable),
+ // and when we see a special byte
+ // e.g. end-of-slice, " or \,
+ // we will append the full range into the v slice before proceeding
+ for i, cursor := 0, 0; ; {
+ if i == cslen {
+ v = append(v, cs[cursor:]...)
+ cs = r.readUntil(d.b2[:0], '"')
+ cslen = len(cs)
+ i, cursor = 0, 0
+ }
+ c = cs[i]
if c == '"' {
+ v = append(v, cs[cursor:i]...)
break
- } else if c == '\\' {
- c = r.readn1()
- switch c {
- case '"', '\\', '/', '\'':
- v = append(v, c)
- case 'b':
- v = append(v, '\b')
- case 'f':
- v = append(v, '\f')
- case 'n':
- v = append(v, '\n')
- case 'r':
- v = append(v, '\r')
- case 't':
- v = append(v, '\t')
- case 'u':
- rr := d.jsonU4(false)
- // fmt.Printf("$$$$$$$$$: is surrogate: %v\n", utf16.IsSurrogate(rr))
- if utf16.IsSurrogate(rr) {
- rr = utf16.DecodeRune(rr, d.jsonU4(true))
+ }
+ if c != '\\' {
+ i++
+ continue
+ }
+ v = append(v, cs[cursor:i]...)
+ i++
+ c = cs[i]
+ switch c {
+ case '"', '\\', '/', '\'':
+ v = append(v, c)
+ case 'b':
+ v = append(v, '\b')
+ case 'f':
+ v = append(v, '\f')
+ case 'n':
+ v = append(v, '\n')
+ case 'r':
+ v = append(v, '\r')
+ case 't':
+ v = append(v, '\t')
+ case 'u':
+ var r rune
+ var rr uint32
+ c = cs[i+4] // may help reduce bounds-checking
+ for j := 1; j < 5; j++ {
+ c = jsonU4Set[cs[i+j]]
+ if c == jsonU4SetErrVal {
+ d.d.errorf(`json: unquoteStr: invalid hex char in \u unicode sequence: %q`, c)
}
- w2 := utf8.EncodeRune(d.bstr[:], rr)
- v = append(v, d.bstr[:w2]...)
- default:
- d.d.errorf("json: unsupported escaped value: %c", c)
+ rr = rr*16 + uint32(c)
}
- } else {
- v = append(v, c)
+ r = rune(rr)
+ i += 4
+ if utf16.IsSurrogate(r) {
+ if !(cs[i+2] == 'u' && cs[i+i] == '\\') {
+ d.d.errorf(`json: unquoteStr: invalid unicode sequence. Expecting \u`)
+ return
+ }
+ i += 2
+ c = cs[i+4] // may help reduce bounds-checking
+ var rr1 uint32
+ for j := 1; j < 5; j++ {
+ c = jsonU4Set[cs[i+j]]
+ if c == jsonU4SetErrVal {
+ d.d.errorf(`json: unquoteStr: invalid hex char in \u unicode sequence: %q`, c)
+ }
+ rr1 = rr1*16 + uint32(c)
+ }
+ r = utf16.DecodeRune(r, rune(rr1))
+ i += 4
+ }
+ w2 := utf8.EncodeRune(d.bstr[:], r)
+ v = append(v, d.bstr[:w2]...)
+ default:
+ d.d.errorf("json: unsupported escaped value: %c", c)
}
+ i++
+ cursor = i
}
d.bs = v
}
-func (d *jsonDecDriver) jsonU4(checkSlashU bool) rune {
- r := d.r
- if checkSlashU && !(r.readn1() == '\\' && r.readn1() == 'u') {
- d.d.errorf(`json: unquoteStr: invalid unicode sequence. Expecting \u`)
- return 0
- }
- // u, _ := strconv.ParseUint(string(d.bstr[:4]), 16, 64)
- var u uint32
- for i := 0; i < 4; i++ {
- v := r.readn1()
- if '0' <= v && v <= '9' {
- v = v - '0'
- } else if 'a' <= v && v <= 'z' {
- v = v - 'a' + 10
- } else if 'A' <= v && v <= 'Z' {
- v = v - 'A' + 10
- } else {
- d.d.errorf(`json: unquoteStr: invalid hex char in \u unicode sequence: %q`, v)
- return 0
- }
- u = u*16 + uint32(v)
- }
- return rune(u)
-}
+// func (d *jsonDecDriver) jsonU4Arr(bs [4]byte) (r rune) {
+// // u, _ := strconv.ParseUint(string(d.bstr[:4]), 16, 64)
+// var u uint32
+// for _, v := range bs {
+// if '0' <= v && v <= '9' {
+// v = v - '0'
+// } else if 'a' <= v && v <= 'f' {
+// v = v - 'a' + 10
+// } else if 'A' <= v && v <= 'f' {
+// v = v - 'A' + 10
+// } else {
+// // d.d.errorf(`json: unquoteStr: invalid hex char in \u unicode sequence: %q`, v)
+// return utf8.RuneError
+// }
+// u = u*16 + uint32(v)
+// }
+// return rune(u)
+// }
func (d *jsonDecDriver) DecodeNaked() {
- z := &d.d.n
+ z := d.d.n
// var decodeFurther bool
if d.tok == 0 {
- var b byte
- r := d.r
- for b = r.readn1(); jsonIsWS(b); b = r.readn1() {
- }
- d.tok = b
+ d.tok = d.r.skip(&jsonCharWhitespaceSet)
}
switch d.tok {
case 'n':
- d.readStrIdx(10, 13) // ull
+ d.readSymbol3('u', 'l', 'l') // d.readLiteralIdx(10, 13) // ull
z.v = valueTypeNil
case 'f':
- d.readStrIdx(5, 9) // alse
+ d.readSymbol4('a', 'l', 's', 'e') // d.readLiteralIdx(5, 9) // alse
z.v = valueTypeBool
z.b = false
case 't':
- d.readStrIdx(1, 4) // rue
+ d.readSymbol3('r', 'u', 'e') // d.readLiteralIdx(1, 4) // rue
z.v = valueTypeBool
z.b = true
case '{':
- z.v = valueTypeMap
- // d.tok = 0 // don't consume. kInterfaceNaked will call ReadMapStart
- // decodeFurther = true
+ z.v = valueTypeMap // don't consume. kInterfaceNaked will call ReadMapStart
case '[':
- z.v = valueTypeArray
- // d.tok = 0 // don't consume. kInterfaceNaked will call ReadArrayStart
- // decodeFurther = true
+ z.v = valueTypeArray // don't consume. kInterfaceNaked will call ReadArrayStart
case '"':
z.v = valueTypeString
z.s = d.DecodeString()
default: // number
- d.decNum(true)
- n := &d.n
- // if the string had a any of [.eE], then decode as float.
- switch {
- case n.explicitExponent, n.dot, n.exponent < 0, n.manOverflow:
+ bs := d.decNumBytes()
+ var err error
+ if len(bs) == 0 {
+ d.d.errorf("json: decode number from empty string")
+ return
+ } else if d.h.PreferFloat || jsonIsFloatBytesB3(bs) { // bytes.IndexByte(bs, '.') != -1 ||...
+ // } else if d.h.PreferFloat || bytes.ContainsAny(bs, ".eE") {
z.v = valueTypeFloat
- z.f = d.floatVal()
- case n.exponent == 0:
- u := n.mantissa
- switch {
- case n.neg:
- z.v = valueTypeInt
- z.i = -int64(u)
- case d.h.SignedInteger:
- z.v = valueTypeInt
- z.i = int64(u)
- default:
- z.v = valueTypeUint
- z.u = u
+ z.f, err = strconv.ParseFloat(stringView(bs), 64)
+ } else if d.h.SignedInteger || bs[0] == '-' {
+ z.v = valueTypeInt
+ z.i, err = strconv.ParseInt(stringView(bs), 10, 64)
+ } else {
+ z.v = valueTypeUint
+ z.u, err = strconv.ParseUint(stringView(bs), 10, 64)
+ }
+ if err != nil {
+ if z.v == valueTypeInt || z.v == valueTypeUint {
+ if v, ok := err.(*strconv.NumError); ok && (v.Err == strconv.ErrRange || v.Err == strconv.ErrSyntax) {
+ z.v = valueTypeFloat
+ z.f, err = strconv.ParseFloat(stringView(bs), 64)
+ }
}
- default:
- u, overflow := n.uintExp()
- switch {
- case overflow:
- z.v = valueTypeFloat
- z.f = d.floatVal()
- case n.neg:
- z.v = valueTypeInt
- z.i = -int64(u)
- case d.h.SignedInteger:
- z.v = valueTypeInt
- z.i = int64(u)
- default:
- z.v = valueTypeUint
- z.u = u
+ if err != nil {
+ d.d.errorf("json: decode number from %s: %v", bs, err)
+ return
}
}
- // fmt.Printf("DecodeNaked: Number: %T, %v\n", v, v)
}
// if decodeFurther {
// d.s.sc.retryRead()
@@ -1102,6 +1048,7 @@ func (d *jsonDecDriver) DecodeNaked() {
type JsonHandle struct {
textEncodingType
BasicHandle
+
// RawBytesExt, if configured, is used to encode and decode raw bytes in a custom way.
// If not configured, raw bytes are encoded to/from base64 text.
RawBytesExt InterfaceExt
@@ -1110,8 +1057,41 @@ type JsonHandle struct {
// - If positive, indent by that number of spaces.
// - If negative, indent by that number of tabs.
Indent int8
+
+ // IntegerAsString controls how integers (signed and unsigned) are encoded.
+ //
+ // Per the JSON Spec, JSON numbers are 64-bit floating point numbers.
+ // Consequently, integers > 2^53 cannot be represented as a JSON number without losing precision.
+ // This can be mitigated by configuring how to encode integers.
+ //
+ // IntegerAsString interpretes the following values:
+ // - if 'L', then encode integers > 2^53 as a json string.
+ // - if 'A', then encode all integers as a json string
+ // containing the exact integer representation as a decimal.
+ // - else encode all integers as a json number (default)
+ IntegerAsString uint8
+
+ // HTMLCharsAsIs controls how to encode some special characters to html: < > &
+ //
+ // By default, we encode them as \uXXX
+ // to prevent security holes when served from some browsers.
+ HTMLCharsAsIs bool
+
+ // PreferFloat says that we will default to decoding a number as a float.
+ // If not set, we will examine the characters of the number and decode as an
+ // integer type if it doesn't have any of the characters [.eE].
+ PreferFloat bool
+
+ // TermWhitespace says that we add a whitespace character
+ // at the end of an encoding.
+ //
+ // The whitespace is important, especially if using numbers in a context
+ // where multiple items are written to a stream.
+ TermWhitespace bool
}
+func (h *JsonHandle) hasElemSeparators() bool { return true }
+
func (h *JsonHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) {
return h.SetExt(rt, tag, &setExtWrapper{i: ext})
}
@@ -1158,14 +1138,35 @@ func (d *jsonDecDriver) reset() {
d.bs = d.bs[:0]
}
d.c, d.tok = 0, 0
- d.n.reset()
+ // d.n.reset()
}
-var jsonEncodeTerminate = []byte{' '}
+// func jsonIsFloatBytes(bs []byte) bool {
+// for _, v := range bs {
+// // if v == '.' || v == 'e' || v == 'E' {
+// if jsonIsFloatSet.isset(v) {
+// return true
+// }
+// }
+// return false
+// }
-func (h *JsonHandle) rpcEncodeTerminate() []byte {
- return jsonEncodeTerminate
+func jsonIsFloatBytesB2(bs []byte) bool {
+ return bytes.IndexByte(bs, '.') != -1 ||
+ bytes.IndexByte(bs, 'E') != -1
}
+func jsonIsFloatBytesB3(bs []byte) bool {
+ return bytes.IndexByte(bs, '.') != -1 ||
+ bytes.IndexByte(bs, 'E') != -1 ||
+ bytes.IndexByte(bs, 'e') != -1
+}
+
+// var jsonEncodeTerminate = []byte{' '}
+
+// func (h *JsonHandle) rpcEncodeTerminate() []byte {
+// return jsonEncodeTerminate
+// }
+
var _ decDriver = (*jsonDecDriver)(nil)
var _ encDriver = (*jsonEncDriver)(nil)
diff --git a/codec/mammoth-test.go.tmpl b/codec/mammoth-test.go.tmpl
new file mode 100644
index 0000000..6d71697
--- /dev/null
+++ b/codec/mammoth-test.go.tmpl
@@ -0,0 +1,33 @@
+// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+// ************************************************************
+// DO NOT EDIT.
+// THIS FILE IS AUTO-GENERATED from mammoth-test.go.tmpl
+// ************************************************************
+
+package codec
+
+// TestMammoth has all the different paths optimized in fast-path
+// It has all the primitives, slices and maps.
+//
+// For each of those types, it has a pointer and a non-pointer field.
+
+type TestMammoth struct {
+
+{{range .Values }}{{if .Primitive }}{{/*
+*/}}{{ .MethodNamePfx "F" true }} {{ .Primitive }}
+{{ .MethodNamePfx "Fptr" true }} *{{ .Primitive }}
+{{end}}{{end}}
+
+{{range .Values }}{{if not .Primitive }}{{if not .MapKey }}{{/*
+*/}}{{ .MethodNamePfx "F" false }} []{{ .Elem }}
+{{ .MethodNamePfx "Fptr" false }} *[]{{ .Elem }}
+{{end}}{{end}}{{end}}
+
+{{range .Values }}{{if not .Primitive }}{{if .MapKey }}{{/*
+*/}}{{ .MethodNamePfx "F" false }} map[{{ .MapKey }}]{{ .Elem }}
+{{ .MethodNamePfx "Fptr" false }} *map[{{ .MapKey }}]{{ .Elem }}
+{{end}}{{end}}{{end}}
+
+}
diff --git a/codec/mammoth_generated_test.go b/codec/mammoth_generated_test.go
new file mode 100644
index 0000000..73c2a7c
--- /dev/null
+++ b/codec/mammoth_generated_test.go
@@ -0,0 +1,593 @@
+// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+// ************************************************************
+// DO NOT EDIT.
+// THIS FILE IS AUTO-GENERATED from mammoth-test.go.tmpl
+// ************************************************************
+
+package codec
+
+// TestMammoth has all the different paths optimized in fast-path
+// It has all the primitives, slices and maps.
+//
+// For each of those types, it has a pointer and a non-pointer field.
+
+type TestMammoth struct {
+ FIntf interface{}
+ FptrIntf *interface{}
+ FString string
+ FptrString *string
+ FFloat32 float32
+ FptrFloat32 *float32
+ FFloat64 float64
+ FptrFloat64 *float64
+ FUint uint
+ FptrUint *uint
+ FUint8 uint8
+ FptrUint8 *uint8
+ FUint16 uint16
+ FptrUint16 *uint16
+ FUint32 uint32
+ FptrUint32 *uint32
+ FUint64 uint64
+ FptrUint64 *uint64
+ FUintptr uintptr
+ FptrUintptr *uintptr
+ FInt int
+ FptrInt *int
+ FInt8 int8
+ FptrInt8 *int8
+ FInt16 int16
+ FptrInt16 *int16
+ FInt32 int32
+ FptrInt32 *int32
+ FInt64 int64
+ FptrInt64 *int64
+ FBool bool
+ FptrBool *bool
+
+ FSliceIntf []interface{}
+ FptrSliceIntf *[]interface{}
+ FSliceString []string
+ FptrSliceString *[]string
+ FSliceFloat32 []float32
+ FptrSliceFloat32 *[]float32
+ FSliceFloat64 []float64
+ FptrSliceFloat64 *[]float64
+ FSliceUint []uint
+ FptrSliceUint *[]uint
+ FSliceUint16 []uint16
+ FptrSliceUint16 *[]uint16
+ FSliceUint32 []uint32
+ FptrSliceUint32 *[]uint32
+ FSliceUint64 []uint64
+ FptrSliceUint64 *[]uint64
+ FSliceUintptr []uintptr
+ FptrSliceUintptr *[]uintptr
+ FSliceInt []int
+ FptrSliceInt *[]int
+ FSliceInt8 []int8
+ FptrSliceInt8 *[]int8
+ FSliceInt16 []int16
+ FptrSliceInt16 *[]int16
+ FSliceInt32 []int32
+ FptrSliceInt32 *[]int32
+ FSliceInt64 []int64
+ FptrSliceInt64 *[]int64
+ FSliceBool []bool
+ FptrSliceBool *[]bool
+
+ FMapIntfIntf map[interface{}]interface{}
+ FptrMapIntfIntf *map[interface{}]interface{}
+ FMapIntfString map[interface{}]string
+ FptrMapIntfString *map[interface{}]string
+ FMapIntfUint map[interface{}]uint
+ FptrMapIntfUint *map[interface{}]uint
+ FMapIntfUint8 map[interface{}]uint8
+ FptrMapIntfUint8 *map[interface{}]uint8
+ FMapIntfUint16 map[interface{}]uint16
+ FptrMapIntfUint16 *map[interface{}]uint16
+ FMapIntfUint32 map[interface{}]uint32
+ FptrMapIntfUint32 *map[interface{}]uint32
+ FMapIntfUint64 map[interface{}]uint64
+ FptrMapIntfUint64 *map[interface{}]uint64
+ FMapIntfUintptr map[interface{}]uintptr
+ FptrMapIntfUintptr *map[interface{}]uintptr
+ FMapIntfInt map[interface{}]int
+ FptrMapIntfInt *map[interface{}]int
+ FMapIntfInt8 map[interface{}]int8
+ FptrMapIntfInt8 *map[interface{}]int8
+ FMapIntfInt16 map[interface{}]int16
+ FptrMapIntfInt16 *map[interface{}]int16
+ FMapIntfInt32 map[interface{}]int32
+ FptrMapIntfInt32 *map[interface{}]int32
+ FMapIntfInt64 map[interface{}]int64
+ FptrMapIntfInt64 *map[interface{}]int64
+ FMapIntfFloat32 map[interface{}]float32
+ FptrMapIntfFloat32 *map[interface{}]float32
+ FMapIntfFloat64 map[interface{}]float64
+ FptrMapIntfFloat64 *map[interface{}]float64
+ FMapIntfBool map[interface{}]bool
+ FptrMapIntfBool *map[interface{}]bool
+ FMapStringIntf map[string]interface{}
+ FptrMapStringIntf *map[string]interface{}
+ FMapStringString map[string]string
+ FptrMapStringString *map[string]string
+ FMapStringUint map[string]uint
+ FptrMapStringUint *map[string]uint
+ FMapStringUint8 map[string]uint8
+ FptrMapStringUint8 *map[string]uint8
+ FMapStringUint16 map[string]uint16
+ FptrMapStringUint16 *map[string]uint16
+ FMapStringUint32 map[string]uint32
+ FptrMapStringUint32 *map[string]uint32
+ FMapStringUint64 map[string]uint64
+ FptrMapStringUint64 *map[string]uint64
+ FMapStringUintptr map[string]uintptr
+ FptrMapStringUintptr *map[string]uintptr
+ FMapStringInt map[string]int
+ FptrMapStringInt *map[string]int
+ FMapStringInt8 map[string]int8
+ FptrMapStringInt8 *map[string]int8
+ FMapStringInt16 map[string]int16
+ FptrMapStringInt16 *map[string]int16
+ FMapStringInt32 map[string]int32
+ FptrMapStringInt32 *map[string]int32
+ FMapStringInt64 map[string]int64
+ FptrMapStringInt64 *map[string]int64
+ FMapStringFloat32 map[string]float32
+ FptrMapStringFloat32 *map[string]float32
+ FMapStringFloat64 map[string]float64
+ FptrMapStringFloat64 *map[string]float64
+ FMapStringBool map[string]bool
+ FptrMapStringBool *map[string]bool
+ FMapFloat32Intf map[float32]interface{}
+ FptrMapFloat32Intf *map[float32]interface{}
+ FMapFloat32String map[float32]string
+ FptrMapFloat32String *map[float32]string
+ FMapFloat32Uint map[float32]uint
+ FptrMapFloat32Uint *map[float32]uint
+ FMapFloat32Uint8 map[float32]uint8
+ FptrMapFloat32Uint8 *map[float32]uint8
+ FMapFloat32Uint16 map[float32]uint16
+ FptrMapFloat32Uint16 *map[float32]uint16
+ FMapFloat32Uint32 map[float32]uint32
+ FptrMapFloat32Uint32 *map[float32]uint32
+ FMapFloat32Uint64 map[float32]uint64
+ FptrMapFloat32Uint64 *map[float32]uint64
+ FMapFloat32Uintptr map[float32]uintptr
+ FptrMapFloat32Uintptr *map[float32]uintptr
+ FMapFloat32Int map[float32]int
+ FptrMapFloat32Int *map[float32]int
+ FMapFloat32Int8 map[float32]int8
+ FptrMapFloat32Int8 *map[float32]int8
+ FMapFloat32Int16 map[float32]int16
+ FptrMapFloat32Int16 *map[float32]int16
+ FMapFloat32Int32 map[float32]int32
+ FptrMapFloat32Int32 *map[float32]int32
+ FMapFloat32Int64 map[float32]int64
+ FptrMapFloat32Int64 *map[float32]int64
+ FMapFloat32Float32 map[float32]float32
+ FptrMapFloat32Float32 *map[float32]float32
+ FMapFloat32Float64 map[float32]float64
+ FptrMapFloat32Float64 *map[float32]float64
+ FMapFloat32Bool map[float32]bool
+ FptrMapFloat32Bool *map[float32]bool
+ FMapFloat64Intf map[float64]interface{}
+ FptrMapFloat64Intf *map[float64]interface{}
+ FMapFloat64String map[float64]string
+ FptrMapFloat64String *map[float64]string
+ FMapFloat64Uint map[float64]uint
+ FptrMapFloat64Uint *map[float64]uint
+ FMapFloat64Uint8 map[float64]uint8
+ FptrMapFloat64Uint8 *map[float64]uint8
+ FMapFloat64Uint16 map[float64]uint16
+ FptrMapFloat64Uint16 *map[float64]uint16
+ FMapFloat64Uint32 map[float64]uint32
+ FptrMapFloat64Uint32 *map[float64]uint32
+ FMapFloat64Uint64 map[float64]uint64
+ FptrMapFloat64Uint64 *map[float64]uint64
+ FMapFloat64Uintptr map[float64]uintptr
+ FptrMapFloat64Uintptr *map[float64]uintptr
+ FMapFloat64Int map[float64]int
+ FptrMapFloat64Int *map[float64]int
+ FMapFloat64Int8 map[float64]int8
+ FptrMapFloat64Int8 *map[float64]int8
+ FMapFloat64Int16 map[float64]int16
+ FptrMapFloat64Int16 *map[float64]int16
+ FMapFloat64Int32 map[float64]int32
+ FptrMapFloat64Int32 *map[float64]int32
+ FMapFloat64Int64 map[float64]int64
+ FptrMapFloat64Int64 *map[float64]int64
+ FMapFloat64Float32 map[float64]float32
+ FptrMapFloat64Float32 *map[float64]float32
+ FMapFloat64Float64 map[float64]float64
+ FptrMapFloat64Float64 *map[float64]float64
+ FMapFloat64Bool map[float64]bool
+ FptrMapFloat64Bool *map[float64]bool
+ FMapUintIntf map[uint]interface{}
+ FptrMapUintIntf *map[uint]interface{}
+ FMapUintString map[uint]string
+ FptrMapUintString *map[uint]string
+ FMapUintUint map[uint]uint
+ FptrMapUintUint *map[uint]uint
+ FMapUintUint8 map[uint]uint8
+ FptrMapUintUint8 *map[uint]uint8
+ FMapUintUint16 map[uint]uint16
+ FptrMapUintUint16 *map[uint]uint16
+ FMapUintUint32 map[uint]uint32
+ FptrMapUintUint32 *map[uint]uint32
+ FMapUintUint64 map[uint]uint64
+ FptrMapUintUint64 *map[uint]uint64
+ FMapUintUintptr map[uint]uintptr
+ FptrMapUintUintptr *map[uint]uintptr
+ FMapUintInt map[uint]int
+ FptrMapUintInt *map[uint]int
+ FMapUintInt8 map[uint]int8
+ FptrMapUintInt8 *map[uint]int8
+ FMapUintInt16 map[uint]int16
+ FptrMapUintInt16 *map[uint]int16
+ FMapUintInt32 map[uint]int32
+ FptrMapUintInt32 *map[uint]int32
+ FMapUintInt64 map[uint]int64
+ FptrMapUintInt64 *map[uint]int64
+ FMapUintFloat32 map[uint]float32
+ FptrMapUintFloat32 *map[uint]float32
+ FMapUintFloat64 map[uint]float64
+ FptrMapUintFloat64 *map[uint]float64
+ FMapUintBool map[uint]bool
+ FptrMapUintBool *map[uint]bool
+ FMapUint8Intf map[uint8]interface{}
+ FptrMapUint8Intf *map[uint8]interface{}
+ FMapUint8String map[uint8]string
+ FptrMapUint8String *map[uint8]string
+ FMapUint8Uint map[uint8]uint
+ FptrMapUint8Uint *map[uint8]uint
+ FMapUint8Uint8 map[uint8]uint8
+ FptrMapUint8Uint8 *map[uint8]uint8
+ FMapUint8Uint16 map[uint8]uint16
+ FptrMapUint8Uint16 *map[uint8]uint16
+ FMapUint8Uint32 map[uint8]uint32
+ FptrMapUint8Uint32 *map[uint8]uint32
+ FMapUint8Uint64 map[uint8]uint64
+ FptrMapUint8Uint64 *map[uint8]uint64
+ FMapUint8Uintptr map[uint8]uintptr
+ FptrMapUint8Uintptr *map[uint8]uintptr
+ FMapUint8Int map[uint8]int
+ FptrMapUint8Int *map[uint8]int
+ FMapUint8Int8 map[uint8]int8
+ FptrMapUint8Int8 *map[uint8]int8
+ FMapUint8Int16 map[uint8]int16
+ FptrMapUint8Int16 *map[uint8]int16
+ FMapUint8Int32 map[uint8]int32
+ FptrMapUint8Int32 *map[uint8]int32
+ FMapUint8Int64 map[uint8]int64
+ FptrMapUint8Int64 *map[uint8]int64
+ FMapUint8Float32 map[uint8]float32
+ FptrMapUint8Float32 *map[uint8]float32
+ FMapUint8Float64 map[uint8]float64
+ FptrMapUint8Float64 *map[uint8]float64
+ FMapUint8Bool map[uint8]bool
+ FptrMapUint8Bool *map[uint8]bool
+ FMapUint16Intf map[uint16]interface{}
+ FptrMapUint16Intf *map[uint16]interface{}
+ FMapUint16String map[uint16]string
+ FptrMapUint16String *map[uint16]string
+ FMapUint16Uint map[uint16]uint
+ FptrMapUint16Uint *map[uint16]uint
+ FMapUint16Uint8 map[uint16]uint8
+ FptrMapUint16Uint8 *map[uint16]uint8
+ FMapUint16Uint16 map[uint16]uint16
+ FptrMapUint16Uint16 *map[uint16]uint16
+ FMapUint16Uint32 map[uint16]uint32
+ FptrMapUint16Uint32 *map[uint16]uint32
+ FMapUint16Uint64 map[uint16]uint64
+ FptrMapUint16Uint64 *map[uint16]uint64
+ FMapUint16Uintptr map[uint16]uintptr
+ FptrMapUint16Uintptr *map[uint16]uintptr
+ FMapUint16Int map[uint16]int
+ FptrMapUint16Int *map[uint16]int
+ FMapUint16Int8 map[uint16]int8
+ FptrMapUint16Int8 *map[uint16]int8
+ FMapUint16Int16 map[uint16]int16
+ FptrMapUint16Int16 *map[uint16]int16
+ FMapUint16Int32 map[uint16]int32
+ FptrMapUint16Int32 *map[uint16]int32
+ FMapUint16Int64 map[uint16]int64
+ FptrMapUint16Int64 *map[uint16]int64
+ FMapUint16Float32 map[uint16]float32
+ FptrMapUint16Float32 *map[uint16]float32
+ FMapUint16Float64 map[uint16]float64
+ FptrMapUint16Float64 *map[uint16]float64
+ FMapUint16Bool map[uint16]bool
+ FptrMapUint16Bool *map[uint16]bool
+ FMapUint32Intf map[uint32]interface{}
+ FptrMapUint32Intf *map[uint32]interface{}
+ FMapUint32String map[uint32]string
+ FptrMapUint32String *map[uint32]string
+ FMapUint32Uint map[uint32]uint
+ FptrMapUint32Uint *map[uint32]uint
+ FMapUint32Uint8 map[uint32]uint8
+ FptrMapUint32Uint8 *map[uint32]uint8
+ FMapUint32Uint16 map[uint32]uint16
+ FptrMapUint32Uint16 *map[uint32]uint16
+ FMapUint32Uint32 map[uint32]uint32
+ FptrMapUint32Uint32 *map[uint32]uint32
+ FMapUint32Uint64 map[uint32]uint64
+ FptrMapUint32Uint64 *map[uint32]uint64
+ FMapUint32Uintptr map[uint32]uintptr
+ FptrMapUint32Uintptr *map[uint32]uintptr
+ FMapUint32Int map[uint32]int
+ FptrMapUint32Int *map[uint32]int
+ FMapUint32Int8 map[uint32]int8
+ FptrMapUint32Int8 *map[uint32]int8
+ FMapUint32Int16 map[uint32]int16
+ FptrMapUint32Int16 *map[uint32]int16
+ FMapUint32Int32 map[uint32]int32
+ FptrMapUint32Int32 *map[uint32]int32
+ FMapUint32Int64 map[uint32]int64
+ FptrMapUint32Int64 *map[uint32]int64
+ FMapUint32Float32 map[uint32]float32
+ FptrMapUint32Float32 *map[uint32]float32
+ FMapUint32Float64 map[uint32]float64
+ FptrMapUint32Float64 *map[uint32]float64
+ FMapUint32Bool map[uint32]bool
+ FptrMapUint32Bool *map[uint32]bool
+ FMapUint64Intf map[uint64]interface{}
+ FptrMapUint64Intf *map[uint64]interface{}
+ FMapUint64String map[uint64]string
+ FptrMapUint64String *map[uint64]string
+ FMapUint64Uint map[uint64]uint
+ FptrMapUint64Uint *map[uint64]uint
+ FMapUint64Uint8 map[uint64]uint8
+ FptrMapUint64Uint8 *map[uint64]uint8
+ FMapUint64Uint16 map[uint64]uint16
+ FptrMapUint64Uint16 *map[uint64]uint16
+ FMapUint64Uint32 map[uint64]uint32
+ FptrMapUint64Uint32 *map[uint64]uint32
+ FMapUint64Uint64 map[uint64]uint64
+ FptrMapUint64Uint64 *map[uint64]uint64
+ FMapUint64Uintptr map[uint64]uintptr
+ FptrMapUint64Uintptr *map[uint64]uintptr
+ FMapUint64Int map[uint64]int
+ FptrMapUint64Int *map[uint64]int
+ FMapUint64Int8 map[uint64]int8
+ FptrMapUint64Int8 *map[uint64]int8
+ FMapUint64Int16 map[uint64]int16
+ FptrMapUint64Int16 *map[uint64]int16
+ FMapUint64Int32 map[uint64]int32
+ FptrMapUint64Int32 *map[uint64]int32
+ FMapUint64Int64 map[uint64]int64
+ FptrMapUint64Int64 *map[uint64]int64
+ FMapUint64Float32 map[uint64]float32
+ FptrMapUint64Float32 *map[uint64]float32
+ FMapUint64Float64 map[uint64]float64
+ FptrMapUint64Float64 *map[uint64]float64
+ FMapUint64Bool map[uint64]bool
+ FptrMapUint64Bool *map[uint64]bool
+ FMapUintptrIntf map[uintptr]interface{}
+ FptrMapUintptrIntf *map[uintptr]interface{}
+ FMapUintptrString map[uintptr]string
+ FptrMapUintptrString *map[uintptr]string
+ FMapUintptrUint map[uintptr]uint
+ FptrMapUintptrUint *map[uintptr]uint
+ FMapUintptrUint8 map[uintptr]uint8
+ FptrMapUintptrUint8 *map[uintptr]uint8
+ FMapUintptrUint16 map[uintptr]uint16
+ FptrMapUintptrUint16 *map[uintptr]uint16
+ FMapUintptrUint32 map[uintptr]uint32
+ FptrMapUintptrUint32 *map[uintptr]uint32
+ FMapUintptrUint64 map[uintptr]uint64
+ FptrMapUintptrUint64 *map[uintptr]uint64
+ FMapUintptrUintptr map[uintptr]uintptr
+ FptrMapUintptrUintptr *map[uintptr]uintptr
+ FMapUintptrInt map[uintptr]int
+ FptrMapUintptrInt *map[uintptr]int
+ FMapUintptrInt8 map[uintptr]int8
+ FptrMapUintptrInt8 *map[uintptr]int8
+ FMapUintptrInt16 map[uintptr]int16
+ FptrMapUintptrInt16 *map[uintptr]int16
+ FMapUintptrInt32 map[uintptr]int32
+ FptrMapUintptrInt32 *map[uintptr]int32
+ FMapUintptrInt64 map[uintptr]int64
+ FptrMapUintptrInt64 *map[uintptr]int64
+ FMapUintptrFloat32 map[uintptr]float32
+ FptrMapUintptrFloat32 *map[uintptr]float32
+ FMapUintptrFloat64 map[uintptr]float64
+ FptrMapUintptrFloat64 *map[uintptr]float64
+ FMapUintptrBool map[uintptr]bool
+ FptrMapUintptrBool *map[uintptr]bool
+ FMapIntIntf map[int]interface{}
+ FptrMapIntIntf *map[int]interface{}
+ FMapIntString map[int]string
+ FptrMapIntString *map[int]string
+ FMapIntUint map[int]uint
+ FptrMapIntUint *map[int]uint
+ FMapIntUint8 map[int]uint8
+ FptrMapIntUint8 *map[int]uint8
+ FMapIntUint16 map[int]uint16
+ FptrMapIntUint16 *map[int]uint16
+ FMapIntUint32 map[int]uint32
+ FptrMapIntUint32 *map[int]uint32
+ FMapIntUint64 map[int]uint64
+ FptrMapIntUint64 *map[int]uint64
+ FMapIntUintptr map[int]uintptr
+ FptrMapIntUintptr *map[int]uintptr
+ FMapIntInt map[int]int
+ FptrMapIntInt *map[int]int
+ FMapIntInt8 map[int]int8
+ FptrMapIntInt8 *map[int]int8
+ FMapIntInt16 map[int]int16
+ FptrMapIntInt16 *map[int]int16
+ FMapIntInt32 map[int]int32
+ FptrMapIntInt32 *map[int]int32
+ FMapIntInt64 map[int]int64
+ FptrMapIntInt64 *map[int]int64
+ FMapIntFloat32 map[int]float32
+ FptrMapIntFloat32 *map[int]float32
+ FMapIntFloat64 map[int]float64
+ FptrMapIntFloat64 *map[int]float64
+ FMapIntBool map[int]bool
+ FptrMapIntBool *map[int]bool
+ FMapInt8Intf map[int8]interface{}
+ FptrMapInt8Intf *map[int8]interface{}
+ FMapInt8String map[int8]string
+ FptrMapInt8String *map[int8]string
+ FMapInt8Uint map[int8]uint
+ FptrMapInt8Uint *map[int8]uint
+ FMapInt8Uint8 map[int8]uint8
+ FptrMapInt8Uint8 *map[int8]uint8
+ FMapInt8Uint16 map[int8]uint16
+ FptrMapInt8Uint16 *map[int8]uint16
+ FMapInt8Uint32 map[int8]uint32
+ FptrMapInt8Uint32 *map[int8]uint32
+ FMapInt8Uint64 map[int8]uint64
+ FptrMapInt8Uint64 *map[int8]uint64
+ FMapInt8Uintptr map[int8]uintptr
+ FptrMapInt8Uintptr *map[int8]uintptr
+ FMapInt8Int map[int8]int
+ FptrMapInt8Int *map[int8]int
+ FMapInt8Int8 map[int8]int8
+ FptrMapInt8Int8 *map[int8]int8
+ FMapInt8Int16 map[int8]int16
+ FptrMapInt8Int16 *map[int8]int16
+ FMapInt8Int32 map[int8]int32
+ FptrMapInt8Int32 *map[int8]int32
+ FMapInt8Int64 map[int8]int64
+ FptrMapInt8Int64 *map[int8]int64
+ FMapInt8Float32 map[int8]float32
+ FptrMapInt8Float32 *map[int8]float32
+ FMapInt8Float64 map[int8]float64
+ FptrMapInt8Float64 *map[int8]float64
+ FMapInt8Bool map[int8]bool
+ FptrMapInt8Bool *map[int8]bool
+ FMapInt16Intf map[int16]interface{}
+ FptrMapInt16Intf *map[int16]interface{}
+ FMapInt16String map[int16]string
+ FptrMapInt16String *map[int16]string
+ FMapInt16Uint map[int16]uint
+ FptrMapInt16Uint *map[int16]uint
+ FMapInt16Uint8 map[int16]uint8
+ FptrMapInt16Uint8 *map[int16]uint8
+ FMapInt16Uint16 map[int16]uint16
+ FptrMapInt16Uint16 *map[int16]uint16
+ FMapInt16Uint32 map[int16]uint32
+ FptrMapInt16Uint32 *map[int16]uint32
+ FMapInt16Uint64 map[int16]uint64
+ FptrMapInt16Uint64 *map[int16]uint64
+ FMapInt16Uintptr map[int16]uintptr
+ FptrMapInt16Uintptr *map[int16]uintptr
+ FMapInt16Int map[int16]int
+ FptrMapInt16Int *map[int16]int
+ FMapInt16Int8 map[int16]int8
+ FptrMapInt16Int8 *map[int16]int8
+ FMapInt16Int16 map[int16]int16
+ FptrMapInt16Int16 *map[int16]int16
+ FMapInt16Int32 map[int16]int32
+ FptrMapInt16Int32 *map[int16]int32
+ FMapInt16Int64 map[int16]int64
+ FptrMapInt16Int64 *map[int16]int64
+ FMapInt16Float32 map[int16]float32
+ FptrMapInt16Float32 *map[int16]float32
+ FMapInt16Float64 map[int16]float64
+ FptrMapInt16Float64 *map[int16]float64
+ FMapInt16Bool map[int16]bool
+ FptrMapInt16Bool *map[int16]bool
+ FMapInt32Intf map[int32]interface{}
+ FptrMapInt32Intf *map[int32]interface{}
+ FMapInt32String map[int32]string
+ FptrMapInt32String *map[int32]string
+ FMapInt32Uint map[int32]uint
+ FptrMapInt32Uint *map[int32]uint
+ FMapInt32Uint8 map[int32]uint8
+ FptrMapInt32Uint8 *map[int32]uint8
+ FMapInt32Uint16 map[int32]uint16
+ FptrMapInt32Uint16 *map[int32]uint16
+ FMapInt32Uint32 map[int32]uint32
+ FptrMapInt32Uint32 *map[int32]uint32
+ FMapInt32Uint64 map[int32]uint64
+ FptrMapInt32Uint64 *map[int32]uint64
+ FMapInt32Uintptr map[int32]uintptr
+ FptrMapInt32Uintptr *map[int32]uintptr
+ FMapInt32Int map[int32]int
+ FptrMapInt32Int *map[int32]int
+ FMapInt32Int8 map[int32]int8
+ FptrMapInt32Int8 *map[int32]int8
+ FMapInt32Int16 map[int32]int16
+ FptrMapInt32Int16 *map[int32]int16
+ FMapInt32Int32 map[int32]int32
+ FptrMapInt32Int32 *map[int32]int32
+ FMapInt32Int64 map[int32]int64
+ FptrMapInt32Int64 *map[int32]int64
+ FMapInt32Float32 map[int32]float32
+ FptrMapInt32Float32 *map[int32]float32
+ FMapInt32Float64 map[int32]float64
+ FptrMapInt32Float64 *map[int32]float64
+ FMapInt32Bool map[int32]bool
+ FptrMapInt32Bool *map[int32]bool
+ FMapInt64Intf map[int64]interface{}
+ FptrMapInt64Intf *map[int64]interface{}
+ FMapInt64String map[int64]string
+ FptrMapInt64String *map[int64]string
+ FMapInt64Uint map[int64]uint
+ FptrMapInt64Uint *map[int64]uint
+ FMapInt64Uint8 map[int64]uint8
+ FptrMapInt64Uint8 *map[int64]uint8
+ FMapInt64Uint16 map[int64]uint16
+ FptrMapInt64Uint16 *map[int64]uint16
+ FMapInt64Uint32 map[int64]uint32
+ FptrMapInt64Uint32 *map[int64]uint32
+ FMapInt64Uint64 map[int64]uint64
+ FptrMapInt64Uint64 *map[int64]uint64
+ FMapInt64Uintptr map[int64]uintptr
+ FptrMapInt64Uintptr *map[int64]uintptr
+ FMapInt64Int map[int64]int
+ FptrMapInt64Int *map[int64]int
+ FMapInt64Int8 map[int64]int8
+ FptrMapInt64Int8 *map[int64]int8
+ FMapInt64Int16 map[int64]int16
+ FptrMapInt64Int16 *map[int64]int16
+ FMapInt64Int32 map[int64]int32
+ FptrMapInt64Int32 *map[int64]int32
+ FMapInt64Int64 map[int64]int64
+ FptrMapInt64Int64 *map[int64]int64
+ FMapInt64Float32 map[int64]float32
+ FptrMapInt64Float32 *map[int64]float32
+ FMapInt64Float64 map[int64]float64
+ FptrMapInt64Float64 *map[int64]float64
+ FMapInt64Bool map[int64]bool
+ FptrMapInt64Bool *map[int64]bool
+ FMapBoolIntf map[bool]interface{}
+ FptrMapBoolIntf *map[bool]interface{}
+ FMapBoolString map[bool]string
+ FptrMapBoolString *map[bool]string
+ FMapBoolUint map[bool]uint
+ FptrMapBoolUint *map[bool]uint
+ FMapBoolUint8 map[bool]uint8
+ FptrMapBoolUint8 *map[bool]uint8
+ FMapBoolUint16 map[bool]uint16
+ FptrMapBoolUint16 *map[bool]uint16
+ FMapBoolUint32 map[bool]uint32
+ FptrMapBoolUint32 *map[bool]uint32
+ FMapBoolUint64 map[bool]uint64
+ FptrMapBoolUint64 *map[bool]uint64
+ FMapBoolUintptr map[bool]uintptr
+ FptrMapBoolUintptr *map[bool]uintptr
+ FMapBoolInt map[bool]int
+ FptrMapBoolInt *map[bool]int
+ FMapBoolInt8 map[bool]int8
+ FptrMapBoolInt8 *map[bool]int8
+ FMapBoolInt16 map[bool]int16
+ FptrMapBoolInt16 *map[bool]int16
+ FMapBoolInt32 map[bool]int32
+ FptrMapBoolInt32 *map[bool]int32
+ FMapBoolInt64 map[bool]int64
+ FptrMapBoolInt64 *map[bool]int64
+ FMapBoolFloat32 map[bool]float32
+ FptrMapBoolFloat32 *map[bool]float32
+ FMapBoolFloat64 map[bool]float64
+ FptrMapBoolFloat64 *map[bool]float64
+ FMapBoolBool map[bool]bool
+ FptrMapBoolBool *map[bool]bool
+}
diff --git a/codec/msgpack.go b/codec/msgpack.go
index f9f8723..fcc3177 100644
--- a/codec/msgpack.go
+++ b/codec/msgpack.go
@@ -104,7 +104,8 @@ var (
type msgpackEncDriver struct {
noBuiltInTypes
- encNoSeparator
+ encDriverNoopContainerWriter
+ // encNoSeparator
e *Encoder
w encWriter
h *MsgpackHandle
@@ -213,21 +214,22 @@ func (e *msgpackEncDriver) encodeExtPreamble(xtag byte, l int) {
}
}
-func (e *msgpackEncDriver) EncodeArrayStart(length int) {
+func (e *msgpackEncDriver) WriteArrayStart(length int) {
e.writeContainerLen(msgpackContainerList, length)
}
-func (e *msgpackEncDriver) EncodeMapStart(length int) {
+func (e *msgpackEncDriver) WriteMapStart(length int) {
e.writeContainerLen(msgpackContainerMap, length)
}
func (e *msgpackEncDriver) EncodeString(c charEncoding, s string) {
+ slen := len(s)
if c == c_RAW && e.h.WriteExt {
- e.writeContainerLen(msgpackContainerBin, len(s))
+ e.writeContainerLen(msgpackContainerBin, slen)
} else {
- e.writeContainerLen(msgpackContainerStr, len(s))
+ e.writeContainerLen(msgpackContainerStr, slen)
}
- if len(s) > 0 {
+ if slen > 0 {
e.w.writestr(s)
}
}
@@ -237,12 +239,13 @@ func (e *msgpackEncDriver) EncodeSymbol(v string) {
}
func (e *msgpackEncDriver) EncodeStringBytes(c charEncoding, bs []byte) {
+ slen := len(bs)
if c == c_RAW && e.h.WriteExt {
- e.writeContainerLen(msgpackContainerBin, len(bs))
+ e.writeContainerLen(msgpackContainerBin, slen)
} else {
- e.writeContainerLen(msgpackContainerStr, len(bs))
+ e.writeContainerLen(msgpackContainerStr, slen)
}
- if len(bs) > 0 {
+ if slen > 0 {
e.w.writeb(bs)
}
}
@@ -272,8 +275,9 @@ type msgpackDecDriver struct {
bdRead bool
br bool // bytes reader
noBuiltInTypes
- noStreamingCodec
- decNoSeparator
+ // noStreamingCodec
+ // decNoSeparator
+ decDriverNoopContainerReader
}
// Note: This returns either a primitive (int, bool, etc) for non-containers,
@@ -286,7 +290,7 @@ func (d *msgpackDecDriver) DecodeNaked() {
d.readNextBd()
}
bd := d.bd
- n := &d.d.n
+ n := d.d.n
var decodeFurther bool
switch bd {
@@ -349,11 +353,11 @@ func (d *msgpackDecDriver) DecodeNaked() {
n.s = d.DecodeString()
} else {
n.v = valueTypeBytes
- n.l = d.DecodeBytes(nil, false, false)
+ n.l = d.DecodeBytes(nil, false)
}
case bd == mpBin8, bd == mpBin16, bd == mpBin32:
n.v = valueTypeBytes
- n.l = d.DecodeBytes(nil, false, false)
+ n.l = d.DecodeBytes(nil, false)
case bd == mpArray16, bd == mpArray32, bd >= mpFixArrayMin && bd <= mpFixArrayMax:
n.v = valueTypeArray
decodeFurther = true
@@ -525,17 +529,46 @@ func (d *msgpackDecDriver) DecodeBool() (b bool) {
return
}
-func (d *msgpackDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) {
+func (d *msgpackDecDriver) DecodeBytes(bs []byte, zerocopy bool) (bsOut []byte) {
if !d.bdRead {
d.readNextBd()
}
+
+ // DecodeBytes could be from: bin str fixstr fixarray array ...
var clen int
- // ignore isstring. Expect that the bytes may be found from msgpackContainerStr or msgpackContainerBin
- if bd := d.bd; bd == mpBin8 || bd == mpBin16 || bd == mpBin32 {
- clen = d.readContainerLen(msgpackContainerBin)
- } else {
+ vt := d.ContainerType()
+ switch vt {
+ case valueTypeBytes:
+ // valueTypeBytes may be a mpBin or an mpStr container
+ if bd := d.bd; bd == mpBin8 || bd == mpBin16 || bd == mpBin32 {
+ clen = d.readContainerLen(msgpackContainerBin)
+ } else {
+ clen = d.readContainerLen(msgpackContainerStr)
+ }
+ case valueTypeString:
clen = d.readContainerLen(msgpackContainerStr)
+ case valueTypeArray:
+ clen = d.readContainerLen(msgpackContainerList)
+ // ensure everything after is one byte each
+ for i := 0; i < clen; i++ {
+ d.readNextBd()
+ if d.bd == mpNil {
+ bs = append(bs, 0)
+ } else if d.bd == mpUint8 {
+ bs = append(bs, d.r.readn1())
+ } else {
+ d.d.errorf("cannot read non-byte into a byte array")
+ return
+ }
+ }
+ d.bdRead = false
+ return bs
+ default:
+ d.d.errorf("invalid container type: expecting bin|str|array")
+ return
}
+
+ // these are (bin|str)(8|16|32)
// println("DecodeBytes: clen: ", clen)
d.bdRead = false
// bytes may be nil, so handle it. if nil, clen=-1.
@@ -549,11 +582,15 @@ func (d *msgpackDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOu
bs = d.b[:]
}
}
- return decByteSlice(d.r, clen, bs)
+ return decByteSlice(d.r, clen, d.d.h.MaxInitLen, bs)
}
func (d *msgpackDecDriver) DecodeString() (s string) {
- return string(d.DecodeBytes(d.b[:], true, true))
+ return string(d.DecodeBytes(d.b[:], true))
+}
+
+func (d *msgpackDecDriver) DecodeStringAsBytes() (s []byte) {
+ return d.DecodeBytes(d.b[:], true)
}
func (d *msgpackDecDriver) readNextBd() {
@@ -561,7 +598,17 @@ func (d *msgpackDecDriver) readNextBd() {
d.bdRead = true
}
+func (d *msgpackDecDriver) uncacheRead() {
+ if d.bdRead {
+ d.r.unreadn1()
+ d.bdRead = false
+ }
+}
+
func (d *msgpackDecDriver) ContainerType() (vt valueType) {
+ if !d.bdRead {
+ d.readNextBd()
+ }
bd := d.bd
if bd == mpNil {
return valueTypeNil
@@ -614,10 +661,16 @@ func (d *msgpackDecDriver) readContainerLen(ct msgpackContainerType) (clen int)
}
func (d *msgpackDecDriver) ReadMapStart() int {
+ if !d.bdRead {
+ d.readNextBd()
+ }
return d.readContainerLen(msgpackContainerMap)
}
func (d *msgpackDecDriver) ReadArrayStart() int {
+ if !d.bdRead {
+ d.readNextBd()
+ }
return d.readContainerLen(msgpackContainerList)
}
@@ -671,10 +724,10 @@ func (d *msgpackDecDriver) decodeExtV(verifyTag bool, tag byte) (xtag byte, xbs
}
xbd := d.bd
if xbd == mpBin8 || xbd == mpBin16 || xbd == mpBin32 {
- xbs = d.DecodeBytes(nil, false, true)
+ xbs = d.DecodeBytes(nil, true)
} else if xbd == mpStr8 || xbd == mpStr16 || xbd == mpStr32 ||
(xbd >= mpFixStrMin && xbd <= mpFixStrMax) {
- xbs = d.DecodeBytes(nil, true, true)
+ xbs = d.DecodeStringAsBytes()
} else {
clen := d.readExtLen()
xtag = d.r.readn1()
@@ -709,6 +762,7 @@ type MsgpackHandle struct {
// a []byte or string based on the setting of RawToString.
WriteExt bool
binaryEncodingType
+ noElemSeparators
}
func (h *MsgpackHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) {
@@ -720,7 +774,7 @@ func (h *MsgpackHandle) newEncDriver(e *Encoder) encDriver {
}
func (h *MsgpackHandle) newDecDriver(d *Decoder) decDriver {
- return &msgpackDecDriver{d: d, r: d.r, h: h, br: d.bytes}
+ return &msgpackDecDriver{d: d, h: h, r: d.r, br: d.bytes}
}
func (e *msgpackEncDriver) reset() {
@@ -728,7 +782,7 @@ func (e *msgpackEncDriver) reset() {
}
func (d *msgpackDecDriver) reset() {
- d.r = d.d.r
+ d.r, d.br = d.d.r, d.d.bytes
d.bd, d.bdRead = 0, false
}
diff --git a/codec/noop.go b/codec/noop.go
index cfee3d0..015af58 100644
--- a/codec/noop.go
+++ b/codec/noop.go
@@ -1,6 +1,8 @@
// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
// Use of this source code is governed by a MIT license found in the LICENSE file.
+// +build ignore
+
package codec
import (
@@ -105,10 +107,9 @@ func (h *noopDrv) DecodeUint(bitsize uint8) (ui uint64) { return uint64(h.
func (h *noopDrv) DecodeFloat(chkOverflow32 bool) (f float64) { return float64(h.m(95)) }
func (h *noopDrv) DecodeBool() (b bool) { return h.m(2) == 0 }
func (h *noopDrv) DecodeString() (s string) { return h.S[h.m(8)] }
+func (h *noopDrv) DecodeStringAsBytes() []byte { return h.DecodeBytes(nil, true) }
-// func (h *noopDrv) DecodeStringAsBytes(bs []byte) []byte { return h.DecodeBytes(bs) }
-
-func (h *noopDrv) DecodeBytes(bs []byte, isstring, zerocopy bool) []byte { return h.B[h.m(len(h.B))] }
+func (h *noopDrv) DecodeBytes(bs []byte, zerocopy bool) []byte { return h.B[h.m(len(h.B))] }
func (h *noopDrv) ReadEnd() { h.end() }
diff --git a/codec/prebuild.go b/codec/prebuild.go
deleted file mode 100644
index 2353263..0000000
--- a/codec/prebuild.go
+++ /dev/null
@@ -1,3 +0,0 @@
-package codec
-
-//go:generate bash prebuild.sh
diff --git a/codec/prebuild.sh b/codec/prebuild.sh
deleted file mode 100755
index 98f4424..0000000
--- a/codec/prebuild.sh
+++ /dev/null
@@ -1,199 +0,0 @@
-#!/bin/bash
-
-# _needgen is a helper function to tell if we need to generate files for msgp, codecgen.
-_needgen() {
- local a="$1"
- zneedgen=0
- if [[ ! -e "$a" ]]
- then
- zneedgen=1
- echo 1
- return 0
- fi
- for i in `ls -1 *.go.tmpl gen.go values_test.go`
- do
- if [[ "$a" -ot "$i" ]]
- then
- zneedgen=1
- echo 1
- return 0
- fi
- done
- echo 0
-}
-
-# _build generates fast-path.go and gen-helper.go.
-#
-# It is needed because there is some dependency between the generated code
-# and the other classes. Consequently, we have to totally remove the
-# generated files and put stubs in place, before calling "go run" again
-# to recreate them.
-_build() {
- if ! [[ "${zforce}" == "1" ||
- "1" == $( _needgen "fast-path.generated.go" ) ||
- "1" == $( _needgen "gen-helper.generated.go" ) ||
- "1" == $( _needgen "gen.generated.go" ) ||
- 1 == 0 ]]
- then
- return 0
- fi
-
- # echo "Running prebuild"
- if [ "${zbak}" == "1" ]
- then
- # echo "Backing up old generated files"
- _zts=`date '+%m%d%Y_%H%M%S'`
- _gg=".generated.go"
- [ -e "gen-helper${_gg}" ] && mv gen-helper${_gg} gen-helper${_gg}__${_zts}.bak
- [ -e "fast-path${_gg}" ] && mv fast-path${_gg} fast-path${_gg}__${_zts}.bak
- # [ -e "safe${_gg}" ] && mv safe${_gg} safe${_gg}__${_zts}.bak
- # [ -e "unsafe${_gg}" ] && mv unsafe${_gg} unsafe${_gg}__${_zts}.bak
- else
- rm -f fast-path.generated.go gen.generated.go gen-helper.generated.go \
- *safe.generated.go *_generated_test.go *.generated_ffjson_expose.go
- fi
-
- cat > gen.generated.go <<EOF
-// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
-// Use of this source code is governed by a MIT license found in the LICENSE file.
-
-package codec
-
-// DO NOT EDIT. THIS FILE IS AUTO-GENERATED FROM gen-dec-(map|array).go.tmpl
-
-const genDecMapTmpl = \`
-EOF
-
- cat >> gen.generated.go < gen-dec-map.go.tmpl
-
- cat >> gen.generated.go <<EOF
-\`
-
-const genDecListTmpl = \`
-EOF
-
- cat >> gen.generated.go < gen-dec-array.go.tmpl
-
- cat >> gen.generated.go <<EOF
-\`
-
-EOF
-
- cat > gen-from-tmpl.codec.generated.go <<EOF
-package codec
-import "io"
-func GenInternalGoFile(r io.Reader, w io.Writer, safe bool) error {
-return genInternalGoFile(r, w, safe)
-}
-EOF
-
- cat > gen-from-tmpl.generated.go <<EOF
-//+build ignore
-
-package main
-
-//import "flag"
-import "ugorji.net/codec"
-import "os"
-
-func run(fnameIn, fnameOut string, safe bool) {
-fin, err := os.Open(fnameIn)
-if err != nil { panic(err) }
-defer fin.Close()
-fout, err := os.Create(fnameOut)
-if err != nil { panic(err) }
-defer fout.Close()
-err = codec.GenInternalGoFile(fin, fout, safe)
-if err != nil { panic(err) }
-}
-
-func main() {
-// do not make safe/unsafe variants.
-// Instead, depend on escape analysis, and place string creation and usage appropriately.
-// run("unsafe.go.tmpl", "safe.generated.go", true)
-// run("unsafe.go.tmpl", "unsafe.generated.go", false)
-run("fast-path.go.tmpl", "fast-path.generated.go", false)
-run("gen-helper.go.tmpl", "gen-helper.generated.go", false)
-}
-
-EOF
- go run -tags=notfastpath gen-from-tmpl.generated.go && \
- rm -f gen-from-tmpl.*generated.go
-}
-
-_codegenerators() {
- if [[ $zforce == "1" ||
- "1" == $( _needgen "values_codecgen${zsfx}" ) ||
- "1" == $( _needgen "values_msgp${zsfx}" ) ||
- "1" == $( _needgen "values_ffjson${zsfx}" ) ||
- 1 == 0 ]]
- then
- # codecgen creates some temporary files in the directory (main, pkg).
- # Consequently, we should start msgp and ffjson first, and also put a small time latency before
- # starting codecgen.
- # Without this, ffjson chokes on one of the temporary files from codecgen.
- if [[ $zexternal == "1" ]]
- then
- echo "ffjson ... " && \
- ffjson -w values_ffjson${zsfx} $zfin &
- zzzIdFF=$!
- echo "msgp ... " && \
- msgp -tests=false -o=values_msgp${zsfx} -file=$zfin &
- zzzIdMsgp=$!
-
- sleep 1 # give ffjson and msgp some buffer time. see note above.
- fi
-
- echo "codecgen - !unsafe ... " && \
- codecgen -rt codecgen -t 'x,codecgen,!unsafe' -o values_codecgen${zsfx} -d 19780 $zfin &
- zzzIdC=$!
- echo "codecgen - unsafe ... " && \
- codecgen -u -rt codecgen -t 'x,codecgen,unsafe' -o values_codecgen_unsafe${zsfx} -d 19781 $zfin &
- zzzIdCU=$!
- wait $zzzIdC $zzzIdCU $zzzIdMsgp $zzzIdFF && \
- # remove (M|Unm)arshalJSON implementations, so they don't conflict with encoding/json bench \
- if [[ $zexternal == "1" ]]
- then
- sed -i 's+ MarshalJSON(+ _MarshalJSON(+g' values_ffjson${zsfx} && \
- sed -i 's+ UnmarshalJSON(+ _UnmarshalJSON(+g' values_ffjson${zsfx}
- fi && \
- echo "generators done!" && \
- true
- fi
-}
-
-# _init reads the arguments and sets up the flags
-_init() {
-OPTIND=1
-while getopts "fbx" flag
-do
- case "x$flag" in
- 'xf') zforce=1;;
- 'xb') zbak=1;;
- 'xx') zexternal=1;;
- *) echo "prebuild.sh accepts [-fb] only"; return 1;;
- esac
-done
-shift $((OPTIND-1))
-OPTIND=1
-}
-
-# main script.
-# First ensure that this is being run from the basedir (i.e. dirname of script is .)
-if [ "." = `dirname $0` ]
-then
- zmydir=`pwd`
- zfin="test_values.generated.go"
- zsfx="_generated_test.go"
- # rm -f *_generated_test.go
- rm -f codecgen-*.go && \
- _init "$@" && \
- _build && \
- cp $zmydir/values_test.go $zmydir/$zfin && \
- _codegenerators && \
- echo prebuild done successfully
- rm -f $zmydir/$zfin
-else
- echo "Script must be run from the directory it resides in"
-fi
-
diff --git a/codec/py_test.go b/codec/py_test.go
index bedd7b0..a497cdf 100644
--- a/codec/py_test.go
+++ b/codec/py_test.go
@@ -1,4 +1,4 @@
-//+build x
+// +build x
// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
// Use of this source code is governed by a MIT license found in the LICENSE file.
diff --git a/codec/rpc.go b/codec/rpc.go
index dad53d0..4c30780 100644
--- a/codec/rpc.go
+++ b/codec/rpc.go
@@ -5,18 +5,19 @@ package codec
import (
"bufio"
+ "errors"
"io"
"net/rpc"
"sync"
)
-// rpcEncodeTerminator allows a handler specify a []byte terminator to send after each Encode.
-//
-// Some codecs like json need to put a space after each encoded value, to serve as a
-// delimiter for things like numbers (else json codec will continue reading till EOF).
-type rpcEncodeTerminator interface {
- rpcEncodeTerminate() []byte
-}
+// // rpcEncodeTerminator allows a handler specify a []byte terminator to send after each Encode.
+// //
+// // Some codecs like json need to put a space after each encoded value, to serve as a
+// // delimiter for things like numbers (else json codec will continue reading till EOF).
+// type rpcEncodeTerminator interface {
+// rpcEncodeTerminate() []byte
+// }
// Rpc provides a rpc Server or Client Codec for rpc communication.
type Rpc interface {
@@ -25,7 +26,7 @@ type Rpc interface {
}
// RpcCodecBuffered allows access to the underlying bufio.Reader/Writer
-// used by the rpc connection. It accomodates use-cases where the connection
+// used by the rpc connection. It accommodates use-cases where the connection
// should be used by rpc and non-rpc functions, e.g. streaming a file after
// sending an rpc response.
type RpcCodecBuffered interface {
@@ -52,6 +53,12 @@ type rpcCodec struct {
func newRPCCodec(conn io.ReadWriteCloser, h Handle) rpcCodec {
bw := bufio.NewWriter(conn)
br := bufio.NewReader(conn)
+
+ // defensive: ensure that jsonH has TermWhitespace turned on.
+ if jsonH, ok := h.(*JsonHandle); ok && !jsonH.TermWhitespace {
+ panic(errors.New("rpc requires a JsonHandle with TermWhitespace set to true"))
+ }
+
return rpcCodec{
rwc: conn,
bw: bw,
@@ -77,17 +84,17 @@ func (c *rpcCodec) write(obj1, obj2 interface{}, writeObj2, doFlush bool) (err e
if err = c.enc.Encode(obj1); err != nil {
return
}
- t, tOk := c.h.(rpcEncodeTerminator)
- if tOk {
- c.bw.Write(t.rpcEncodeTerminate())
- }
+ // t, tOk := c.h.(rpcEncodeTerminator)
+ // if tOk {
+ // c.bw.Write(t.rpcEncodeTerminate())
+ // }
if writeObj2 {
if err = c.enc.Encode(obj2); err != nil {
return
}
- if tOk {
- c.bw.Write(t.rpcEncodeTerminate())
- }
+ // if tOk {
+ // c.bw.Write(t.rpcEncodeTerminate())
+ // }
}
if doFlush {
return c.bw.Flush()
diff --git a/codec/shared_test.go b/codec/shared_test.go
new file mode 100644
index 0000000..d397ca1
--- /dev/null
+++ b/codec/shared_test.go
@@ -0,0 +1,284 @@
+// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+package codec
+
+// This file sets up the variables used, including testInitFns.
+// Each file should add initialization that should be performed
+// after flags are parsed.
+//
+// init is a multi-step process:
+// - setup vars (handled by init functions in each file)
+// - parse flags
+// - setup derived vars (handled by pre-init registered functions - registered in init function)
+// - post init (handled by post-init registered functions - registered in init function)
+// This way, no one has to manage carefully control the initialization
+// using file names, etc.
+//
+// Tests which require external dependencies need the -tag=x parameter.
+// They should be run as:
+// go test -tags=x -run=. <other parameters ...>
+// Benchmarks should also take this parameter, to include the sereal, xdr, etc.
+// To run against codecgen, etc, make sure you pass extra parameters.
+// Example usage:
+// go test "-tags=x codecgen" -bench=. <other parameters ...>
+//
+// To fully test everything:
+// go test -tags=x -benchtime=100ms -tv -bg -bi -brw -bu -v -run=. -bench=.
+
+// Handling flags
+// codec_test.go will define a set of global flags for testing, including:
+// - Use Reset
+// - Use IO reader/writer (vs direct bytes)
+// - Set Canonical
+// - Set InternStrings
+// - Use Symbols
+//
+// This way, we can test them all by running same set of tests with a different
+// set of flags.
+//
+// Following this, all the benchmarks will utilize flags set by codec_test.go
+// and will not redefine these "global" flags.
+
+import (
+ "bytes"
+ "flag"
+ "io"
+ "sync"
+)
+
+// DO NOT REMOVE - replacement line for go-codec-bench import declaration tag //
+
+type testHED struct {
+ H Handle
+ E *Encoder
+ D *Decoder
+}
+
+type ioReaderWrapper struct {
+ r io.Reader
+}
+
+func (x ioReaderWrapper) Read(p []byte) (n int, err error) {
+ return x.r.Read(p)
+}
+
+type ioWriterWrapper struct {
+ w io.Writer
+}
+
+func (x ioWriterWrapper) Write(p []byte) (n int, err error) {
+ return x.w.Write(p)
+}
+
+var (
+ // testNoopH = NoopHandle(8)
+ testMsgpackH = &MsgpackHandle{}
+ testBincH = &BincHandle{}
+ testSimpleH = &SimpleHandle{}
+ testCborH = &CborHandle{}
+ testJsonH = &JsonHandle{}
+
+ testHandles []Handle
+ testPreInitFns []func()
+ testPostInitFns []func()
+
+ testOnce sync.Once
+
+ testHEDs []testHED
+)
+
+// flag variables used by tests (and bench)
+var (
+ testDepth int
+
+ testVerbose bool
+ testInitDebug bool
+ testStructToArray bool
+ testCanonical bool
+ testUseReset bool
+ testSkipIntf bool
+ testInternStr bool
+ testUseMust bool
+ testCheckCircRef bool
+
+ testUseIoEncDec int
+ testUseIoWrapper bool
+
+ testMaxInitLen int
+
+ testNumRepeatString int
+)
+
+// variables that are not flags, but which can configure the handles
+var (
+ testEncodeOptions EncodeOptions
+ testDecodeOptions DecodeOptions
+)
+
+// flag variables used by bench
+var (
+ benchDoInitBench bool
+ benchVerify bool
+ benchUnscientificRes bool = false
+ benchMapStringKeyOnly bool
+ //depth of 0 maps to ~400bytes json-encoded string, 1 maps to ~1400 bytes, etc
+ //For depth>1, we likely trigger stack growth for encoders, making benchmarking unreliable.
+ benchDepth int
+ benchInitDebug bool
+)
+
+func init() {
+ testHEDs = make([]testHED, 0, 32)
+ testHandles = append(testHandles,
+ // testNoopH,
+ testMsgpackH, testBincH, testSimpleH,
+ testCborH, testJsonH)
+ testInitFlags()
+ benchInitFlags()
+}
+
+func testInitFlags() {
+ // delete(testDecOpts.ExtFuncs, timeTyp)
+ flag.IntVar(&testDepth, "tsd", 0, "Test Struc Depth")
+ flag.BoolVar(&testVerbose, "tv", false, "Test Verbose")
+ flag.BoolVar(&testInitDebug, "tg", false, "Test Init Debug")
+ flag.IntVar(&testUseIoEncDec, "ti", -1, "Use IO Reader/Writer for Marshal/Unmarshal ie >= 0")
+ flag.BoolVar(&testUseIoWrapper, "tiw", false, "Wrap the IO Reader/Writer with a base pass-through reader/writer")
+ flag.BoolVar(&testStructToArray, "ts", false, "Set StructToArray option")
+ flag.BoolVar(&testCanonical, "tc", false, "Set Canonical option")
+ flag.BoolVar(&testInternStr, "te", false, "Set InternStr option")
+ flag.BoolVar(&testSkipIntf, "tf", false, "Skip Interfaces")
+ flag.BoolVar(&testUseReset, "tr", false, "Use Reset")
+ flag.IntVar(&testNumRepeatString, "trs", 8, "Create string variables by repeating a string N times")
+ flag.IntVar(&testMaxInitLen, "tx", 0, "Max Init Len")
+ flag.BoolVar(&testUseMust, "tm", true, "Use Must(En|De)code")
+ flag.BoolVar(&testCheckCircRef, "tl", false, "Use Check Circular Ref")
+}
+
+func benchInitFlags() {
+ flag.BoolVar(&benchMapStringKeyOnly, "bs", false, "Bench use maps with string keys only")
+ flag.BoolVar(&benchInitDebug, "bg", false, "Bench Debug")
+ flag.IntVar(&benchDepth, "bd", 1, "Bench Depth")
+ flag.BoolVar(&benchDoInitBench, "bi", false, "Run Bench Init")
+ flag.BoolVar(&benchVerify, "bv", false, "Verify Decoded Value during Benchmark")
+ flag.BoolVar(&benchUnscientificRes, "bu", false, "Show Unscientific Results during Benchmark")
+}
+
+func testHEDGet(h Handle) *testHED {
+ for i := range testHEDs {
+ v := &testHEDs[i]
+ if v.H == h {
+ return v
+ }
+ }
+ testHEDs = append(testHEDs, testHED{h, NewEncoder(nil, h), NewDecoder(nil, h)})
+ return &testHEDs[len(testHEDs)-1]
+}
+
+func testReinit() {
+ testOnce = sync.Once{}
+ testHEDs = nil
+}
+
+func testInitAll() {
+ // only parse it once.
+ if !flag.Parsed() {
+ flag.Parse()
+ }
+ for _, f := range testPreInitFns {
+ f()
+ }
+ for _, f := range testPostInitFns {
+ f()
+ }
+}
+
+func testCodecEncode(ts interface{}, bsIn []byte,
+ fn func([]byte) *bytes.Buffer, h Handle) (bs []byte, err error) {
+ // bs = make([]byte, 0, approxSize)
+ var e *Encoder
+ var buf *bytes.Buffer
+ if testUseReset {
+ e = testHEDGet(h).E
+ } else {
+ e = NewEncoder(nil, h)
+ }
+ bh := BasicHandleDoNotUse(h)
+ var oldWriteBufferSize int
+ if testUseIoEncDec >= 0 {
+ buf = fn(bsIn)
+ // set the encode options for using a buffer
+ oldWriteBufferSize = bh.WriterBufferSize
+ bh.WriterBufferSize = testUseIoEncDec
+ if testUseIoWrapper {
+ e.Reset(ioWriterWrapper{buf})
+ } else {
+ e.Reset(buf)
+ }
+ } else {
+ bs = bsIn
+ e.ResetBytes(&bs)
+ }
+ if testUseMust {
+ e.MustEncode(ts)
+ } else {
+ err = e.Encode(ts)
+ }
+ if testUseIoEncDec >= 0 {
+ bs = buf.Bytes()
+ bh.WriterBufferSize = oldWriteBufferSize
+ }
+ return
+}
+
+func testCodecDecode(bs []byte, ts interface{}, h Handle) (err error) {
+ var d *Decoder
+ // var buf *bytes.Reader
+ if testUseReset {
+ d = testHEDGet(h).D
+ } else {
+ d = NewDecoder(nil, h)
+ }
+ bh := BasicHandleDoNotUse(h)
+ var oldReadBufferSize int
+ if testUseIoEncDec >= 0 {
+ buf := bytes.NewReader(bs)
+ oldReadBufferSize = bh.ReaderBufferSize
+ bh.ReaderBufferSize = testUseIoEncDec
+ if testUseIoWrapper {
+ d.Reset(ioReaderWrapper{buf})
+ } else {
+ d.Reset(buf)
+ }
+ } else {
+ d.ResetBytes(bs)
+ }
+ if testUseMust {
+ d.MustDecode(ts)
+ } else {
+ err = d.Decode(ts)
+ }
+ if testUseIoEncDec >= 0 {
+ bh.ReaderBufferSize = oldReadBufferSize
+ }
+ return
+}
+
+// ----- functions below are used only by benchmarks alone
+
+func fnBenchmarkByteBuf(bsIn []byte) (buf *bytes.Buffer) {
+ // var buf bytes.Buffer
+ // buf.Grow(approxSize)
+ buf = bytes.NewBuffer(bsIn)
+ buf.Truncate(0)
+ return
+}
+
+func benchFnCodecEncode(ts interface{}, bsIn []byte, h Handle) (bs []byte, err error) {
+ return testCodecEncode(ts, bsIn, fnBenchmarkByteBuf, h)
+}
+
+func benchFnCodecDecode(bs []byte, ts interface{}, h Handle) (err error) {
+ return testCodecDecode(bs, ts, h)
+}
diff --git a/codec/simple.go b/codec/simple.go
index 7c0ba7a..b69a15e 100644
--- a/codec/simple.go
+++ b/codec/simple.go
@@ -30,7 +30,8 @@ const (
type simpleEncDriver struct {
noBuiltInTypes
- encNoSeparator
+ encDriverNoopContainerWriter
+ // encNoSeparator
e *Encoder
h *SimpleHandle
w encWriter
@@ -124,11 +125,11 @@ func (e *simpleEncDriver) encodeExtPreamble(xtag byte, length int) {
e.w.writen1(xtag)
}
-func (e *simpleEncDriver) EncodeArrayStart(length int) {
+func (e *simpleEncDriver) WriteArrayStart(length int) {
e.encLen(simpleVdArray, length)
}
-func (e *simpleEncDriver) EncodeMapStart(length int) {
+func (e *simpleEncDriver) WriteMapStart(length int) {
e.encLen(simpleVdMap, length)
}
@@ -155,10 +156,10 @@ type simpleDecDriver struct {
bdRead bool
bd byte
br bool // bytes reader
+ b [scratchByteArrayLen]byte
noBuiltInTypes
- noStreamingCodec
- decNoSeparator
- b [scratchByteArrayLen]byte
+ // noStreamingCodec
+ decDriverNoopContainerReader
}
func (d *simpleDecDriver) readNextBd() {
@@ -166,7 +167,17 @@ func (d *simpleDecDriver) readNextBd() {
d.bdRead = true
}
+func (d *simpleDecDriver) uncacheRead() {
+ if d.bdRead {
+ d.r.unreadn1()
+ d.bdRead = false
+ }
+}
+
func (d *simpleDecDriver) ContainerType() (vt valueType) {
+ if !d.bdRead {
+ d.readNextBd()
+ }
if d.bd == simpleVdNil {
return valueTypeNil
} else if d.bd == simpleVdByteArray || d.bd == simpleVdByteArray+1 ||
@@ -308,11 +319,17 @@ func (d *simpleDecDriver) DecodeBool() (b bool) {
}
func (d *simpleDecDriver) ReadMapStart() (length int) {
+ if !d.bdRead {
+ d.readNextBd()
+ }
d.bdRead = false
return d.decLen()
}
func (d *simpleDecDriver) ReadArrayStart() (length int) {
+ if !d.bdRead {
+ d.readNextBd()
+ }
d.bdRead = false
return d.decLen()
}
@@ -340,15 +357,19 @@ func (d *simpleDecDriver) decLen() int {
}
return int(ui)
}
- d.d.errorf("decLen: Cannot read length: bd%8 must be in range 0..4. Got: %d", d.bd%8)
+ d.d.errorf("decLen: Cannot read length: bd%%8 must be in range 0..4. Got: %d", d.bd%8)
return -1
}
func (d *simpleDecDriver) DecodeString() (s string) {
- return string(d.DecodeBytes(d.b[:], true, true))
+ return string(d.DecodeBytes(d.b[:], true))
+}
+
+func (d *simpleDecDriver) DecodeStringAsBytes() (s []byte) {
+ return d.DecodeBytes(d.b[:], true)
}
-func (d *simpleDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) {
+func (d *simpleDecDriver) DecodeBytes(bs []byte, zerocopy bool) (bsOut []byte) {
if !d.bdRead {
d.readNextBd()
}
@@ -365,7 +386,7 @@ func (d *simpleDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut
bs = d.b[:]
}
}
- return decByteSlice(d.r, clen, bs)
+ return decByteSlice(d.r, clen, d.d.h.MaxInitLen, bs)
}
func (d *simpleDecDriver) DecodeExt(rv interface{}, xtag uint64, ext Ext) (realxtag uint64) {
@@ -399,7 +420,7 @@ func (d *simpleDecDriver) decodeExtV(verifyTag bool, tag byte) (xtag byte, xbs [
}
xbs = d.r.readx(l)
case simpleVdByteArray, simpleVdByteArray + 1, simpleVdByteArray + 2, simpleVdByteArray + 3, simpleVdByteArray + 4:
- xbs = d.DecodeBytes(nil, false, true)
+ xbs = d.DecodeBytes(nil, true)
default:
d.d.errorf("Invalid d.bd for extensions (Expecting extensions or byte array). Got: 0x%x", d.bd)
return
@@ -413,7 +434,7 @@ func (d *simpleDecDriver) DecodeNaked() {
d.readNextBd()
}
- n := &d.d.n
+ n := d.d.n
var decodeFurther bool
switch d.bd {
@@ -447,7 +468,7 @@ func (d *simpleDecDriver) DecodeNaked() {
n.s = d.DecodeString()
case simpleVdByteArray, simpleVdByteArray + 1, simpleVdByteArray + 2, simpleVdByteArray + 3, simpleVdByteArray + 4:
n.v = valueTypeBytes
- n.l = d.DecodeBytes(nil, false, false)
+ n.l = d.DecodeBytes(nil, false)
case simpleVdExt, simpleVdExt + 1, simpleVdExt + 2, simpleVdExt + 3, simpleVdExt + 4:
n.v = valueTypeExt
l := d.decLen()
@@ -474,7 +495,7 @@ func (d *simpleDecDriver) DecodeNaked() {
// SimpleHandle is a Handle for a very simple encoding format.
//
// simple is a simplistic codec similar to binc, but not as compact.
-// - Encoding of a value is always preceeded by the descriptor byte (bd)
+// - Encoding of a value is always preceded by the descriptor byte (bd)
// - True, false, nil are encoded fully in 1 byte (the descriptor)
// - Integers (intXXX, uintXXX) are encoded in 1, 2, 4 or 8 bytes (plus a descriptor byte).
// There are positive (uintXXX and intXXX >= 0) and negative (intXXX < 0) integers.
@@ -492,6 +513,7 @@ func (d *simpleDecDriver) DecodeNaked() {
type SimpleHandle struct {
BasicHandle
binaryEncodingType
+ noElemSeparators
}
func (h *SimpleHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) {
@@ -503,7 +525,7 @@ func (h *SimpleHandle) newEncDriver(e *Encoder) encDriver {
}
func (h *SimpleHandle) newDecDriver(d *Decoder) decDriver {
- return &simpleDecDriver{d: d, r: d.r, h: h, br: d.bytes}
+ return &simpleDecDriver{d: d, h: h, r: d.r, br: d.bytes}
}
func (e *simpleEncDriver) reset() {
@@ -511,7 +533,7 @@ func (e *simpleEncDriver) reset() {
}
func (d *simpleDecDriver) reset() {
- d.r = d.d.r
+ d.r, d.br = d.d.r, d.d.bytes
d.bd, d.bdRead = 0, false
}
diff --git a/codec/test.py b/codec/test.py
index dfe3b0c..800376f 100755
--- a/codec/test.py
+++ b/codec/test.py
@@ -9,6 +9,8 @@
# sudo apt-get install python-pip
# pip install --user msgpack-python msgpack-rpc-python cbor
+# Ensure all "string" keys are utf strings (else encoded as bytes)
+
import cbor, msgpack, msgpackrpc, sys, os, threading
def get_test_data_list():
@@ -26,35 +28,39 @@ def get_test_data_list():
-3232.0,
-6464646464.0,
3232.0,
+ 6464.0,
6464646464.0,
False,
True,
+ u"null",
None,
- u"someday",
- u"",
- u"bytestring",
+ u"some&day>some<day",
1328176922000002000,
+ u"",
-2206187877999998000,
+ u"bytestring",
270,
+ u"none",
-2013855847999995777,
#-6795364578871345152,
]
l1 = [
{ "true": True,
"false": False },
- { "true": "True",
+ { "true": u"True",
"false": False,
"uint16(1616)": 1616 },
{ "list": [1616, 32323232, True, -3232.0, {"TRUE":True, "FALSE":False}, [True, False] ],
"int32":32323232, "bool": True,
- "LONG STRING": "123456789012345678901234567890123456789012345678901234567890",
- "SHORT STRING": "1234567890" },
- { True: "true", 8: False, "false": 0 }
+ "LONG STRING": u"123456789012345678901234567890123456789012345678901234567890",
+ "SHORT STRING": u"1234567890" },
+ { True: "true", 138: False, "false": 200 }
]
l = []
l.extend(l0)
l.append(l0)
+ l.append(1)
l.extend(l1)
return l
@@ -78,7 +84,7 @@ def doRpcServer(port, stopTimeSec):
def EchoStruct(self, msg):
return ("%s" % msg)
- addr = msgpackrpc.Address('localhost', port)
+ addr = msgpackrpc.Address('127.0.0.1', port)
server = msgpackrpc.Server(EchoHandler())
server.listen(addr)
# run thread to stop it after stopTimeSec seconds if > 0
@@ -90,14 +96,14 @@ def doRpcServer(port, stopTimeSec):
server.start()
def doRpcClientToPythonSvc(port):
- address = msgpackrpc.Address('localhost', port)
+ address = msgpackrpc.Address('127.0.0.1', port)
client = msgpackrpc.Client(address, unpack_encoding='utf-8')
print client.call("Echo123", "A1", "B2", "C3")
print client.call("EchoStruct", {"A" :"Aa", "B":"Bb", "C":"Cc"})
def doRpcClientToGoSvc(port):
# print ">>>> port: ", port, " <<<<<"
- address = msgpackrpc.Address('localhost', port)
+ address = msgpackrpc.Address('127.0.0.1', port)
client = msgpackrpc.Client(address, unpack_encoding='utf-8')
print client.call("TestRpcInt.Echo123", ["A1", "B2", "C3"])
print client.call("TestRpcInt.EchoStruct", {"A" :"Aa", "B":"Bb", "C":"Cc"})
diff --git a/codec/tests.sh b/codec/tests.sh
deleted file mode 100755
index 00857b6..0000000
--- a/codec/tests.sh
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/bin/bash
-
-# Run all the different permutations of all the tests.
-# This helps ensure that nothing gets broken.
-
-_run() {
- # 1. VARIATIONS: regular (t), canonical (c), IO R/W (i),
- # binc-nosymbols (n), struct2array (s), intern string (e),
- # json-indent (d), circular (l)
- # 2. MODE: reflection (r), external (x), codecgen (g), unsafe (u), notfastpath (f)
- # 3. OPTIONS: verbose (v), reset (z), must (m),
- #
- # Use combinations of mode to get exactly what you want,
- # and then pass the variations you need.
-
- ztags=""
- zargs=""
- local OPTIND
- OPTIND=1
- while getopts "_xurtcinsvgzmefdl" flag
- do
- case "x$flag" in
- 'xr') ;;
- 'xf') ztags="$ztags notfastpath" ;;
- 'xg') ztags="$ztags codecgen" ;;
- 'xx') ztags="$ztags x" ;;
- 'xu') ztags="$ztags unsafe" ;;
- 'xv') zargs="$zargs -tv" ;;
- 'xz') zargs="$zargs -tr" ;;
- 'xm') zargs="$zargs -tm" ;;
- 'xl') zargs="$zargs -tl" ;;
- *) ;;
- esac
- done
- # shift $((OPTIND-1))
- printf '............. TAGS: %s .............\n' "$ztags"
- # echo ">>>>>>> TAGS: $ztags"
-
- OPTIND=1
- while getopts "_xurtcinsvgzmefdl" flag
- do
- case "x$flag" in
- 'xt') printf ">>>>>>> REGULAR : "; go test "-tags=$ztags" $zargs ; sleep 2 ;;
- 'xc') printf ">>>>>>> CANONICAL : "; go test "-tags=$ztags" $zargs -tc; sleep 2 ;;
- 'xi') printf ">>>>>>> I/O : "; go test "-tags=$ztags" $zargs -ti; sleep 2 ;;
- 'xn') printf ">>>>>>> NO_SYMBOLS : "; go test "-tags=$ztags" -run=Binc $zargs -tn; sleep 2 ;;
- 'xs') printf ">>>>>>> TO_ARRAY : "; go test "-tags=$ztags" $zargs -ts; sleep 2 ;;
- 'xe') printf ">>>>>>> INTERN : "; go test "-tags=$ztags" $zargs -te; sleep 2 ;;
- 'xd') printf ">>>>>>> INDENT : ";
- go test "-tags=$ztags" -run=JsonCodecsTable -td=-1 $zargs;
- go test "-tags=$ztags" -run=JsonCodecsTable -td=8 $zargs;
- sleep 2 ;;
- *) ;;
- esac
- done
- shift $((OPTIND-1))
-
- OPTIND=1
-}
-
-# echo ">>>>>>> RUNNING VARIATIONS OF TESTS"
-if [[ "x$@" = "x" ]]; then
- # All: r, x, g, gu
- _run "-_tcinsed_ml" # regular
- _run "-_tcinsed_ml_z" # regular with reset
- _run "-_tcinsed_ml_f" # regular with no fastpath (notfastpath)
- _run "-x_tcinsed_ml" # external
- _run "-gx_tcinsed_ml" # codecgen: requires external
- _run "-gxu_tcinsed_ml" # codecgen + unsafe
-elif [[ "x$@" = "x-Z" ]]; then
- # Regular
- _run "-_tcinsed_ml" # regular
- _run "-_tcinsed_ml_z" # regular with reset
-elif [[ "x$@" = "x-F" ]]; then
- # regular with notfastpath
- _run "-_tcinsed_ml_f" # regular
- _run "-_tcinsed_ml_zf" # regular with reset
-else
- _run "$@"
-fi
diff --git a/codec/time.go b/codec/time.go
index 718b731..55841d4 100644
--- a/codec/time.go
+++ b/codec/time.go
@@ -5,23 +5,10 @@ package codec
import (
"fmt"
- "reflect"
"time"
)
-var (
- timeDigits = [...]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
- timeExtEncFn = func(rv reflect.Value) (bs []byte, err error) {
- defer panicToErr(&err)
- bs = timeExt{}.WriteExt(rv.Interface())
- return
- }
- timeExtDecFn = func(rv reflect.Value, bs []byte) (err error) {
- defer panicToErr(&err)
- timeExt{}.ReadExt(rv.Interface(), bs)
- return
- }
-)
+var timeDigits = [...]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
type timeExt struct{}
@@ -210,24 +197,24 @@ func decodeTime(bs []byte) (tt time.Time, err error) {
return
}
-func timeLocUTCName(tzint int16) string {
- if tzint == 0 {
- return "UTC"
- }
- var tzname = []byte("UTC+00:00")
- //tzname := fmt.Sprintf("UTC%s%02d:%02d", tzsign, tz/60, tz%60) //perf issue using Sprintf. inline below.
- //tzhr, tzmin := tz/60, tz%60 //faster if u convert to int first
- var tzhr, tzmin int16
- if tzint < 0 {
- tzname[3] = '-' // (TODO: verify. this works here)
- tzhr, tzmin = -tzint/60, (-tzint)%60
- } else {
- tzhr, tzmin = tzint/60, tzint%60
- }
- tzname[4] = timeDigits[tzhr/10]
- tzname[5] = timeDigits[tzhr%10]
- tzname[7] = timeDigits[tzmin/10]
- tzname[8] = timeDigits[tzmin%10]
- return string(tzname)
- //return time.FixedZone(string(tzname), int(tzint)*60)
-}
+// func timeLocUTCName(tzint int16) string {
+// if tzint == 0 {
+// return "UTC"
+// }
+// var tzname = []byte("UTC+00:00")
+// //tzname := fmt.Sprintf("UTC%s%02d:%02d", tzsign, tz/60, tz%60) //perf issue using Sprintf. inline below.
+// //tzhr, tzmin := tz/60, tz%60 //faster if u convert to int first
+// var tzhr, tzmin int16
+// if tzint < 0 {
+// tzname[3] = '-' // (TODO: verify. this works here)
+// tzhr, tzmin = -tzint/60, (-tzint)%60
+// } else {
+// tzhr, tzmin = tzint/60, tzint%60
+// }
+// tzname[4] = timeDigits[tzhr/10]
+// tzname[5] = timeDigits[tzhr%10]
+// tzname[7] = timeDigits[tzmin/10]
+// tzname[8] = timeDigits[tzmin%10]
+// return string(tzname)
+// //return time.FixedZone(string(tzname), int(tzint)*60)
+// }
diff --git a/codec/values_flex_test.go b/codec/values_flex_test.go
new file mode 100644
index 0000000..bb15ffc
--- /dev/null
+++ b/codec/values_flex_test.go
@@ -0,0 +1,69 @@
+/* // +build testing */
+
+// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+package codec
+
+// This file contains values used by tests and benchmarks.
+
+type TestStrucFlex struct {
+ _struct struct{} `codec:",omitempty"` //set omitempty for every field
+ testStrucCommon
+
+ Mis map[int]string
+ Miwu64s map[int]wrapUint64Slice
+ Mfwss map[float64]wrapStringSlice
+ Mf32wss map[float32]wrapStringSlice
+ Mui2wss map[uint64]wrapStringSlice
+ Msu2wss map[stringUint64T]wrapStringSlice
+
+ //M map[interface{}]interface{} `json:"-",bson:"-"`
+ Mtsptr map[string]*TestStrucFlex
+ Mts map[string]TestStrucFlex
+ Its []*TestStrucFlex
+ Nteststruc *TestStrucFlex
+}
+
+func newTestStrucFlex(depth, n int, bench, useInterface, useStringKeyOnly bool) (ts *TestStrucFlex) {
+ ts = &TestStrucFlex{
+ Miwu64s: map[int]wrapUint64Slice{
+ 5: []wrapUint64{1, 2, 3, 4, 5},
+ 3: []wrapUint64{1, 2, 3},
+ },
+
+ Mf32wss: map[float32]wrapStringSlice{
+ 5.0: []wrapString{"1.0", "2.0", "3.0", "4.0", "5.0"},
+ 3.0: []wrapString{"1.0", "2.0", "3.0"},
+ },
+
+ Mui2wss: map[uint64]wrapStringSlice{
+ 5: []wrapString{"1.0", "2.0", "3.0", "4.0", "5.0"},
+ 3: []wrapString{"1.0", "2.0", "3.0"},
+ },
+
+ Mfwss: map[float64]wrapStringSlice{
+ 5.0: []wrapString{"1.0", "2.0", "3.0", "4.0", "5.0"},
+ 3.0: []wrapString{"1.0", "2.0", "3.0"},
+ },
+ Mis: map[int]string{
+ 1: "one",
+ 22: "twenty two",
+ -44: "minus forty four",
+ },
+ }
+ populateTestStrucCommon(&ts.testStrucCommon, n, bench, useInterface, useStringKeyOnly)
+ if depth > 0 {
+ depth--
+ if ts.Mtsptr == nil {
+ ts.Mtsptr = make(map[string]*TestStrucFlex)
+ }
+ if ts.Mts == nil {
+ ts.Mts = make(map[string]TestStrucFlex)
+ }
+ ts.Mtsptr["0"] = newTestStrucFlex(depth, n, bench, useInterface, useStringKeyOnly)
+ ts.Mts["0"] = *(ts.Mtsptr["0"])
+ ts.Its = append(ts.Its, ts.Mtsptr["0"])
+ }
+ return
+}
diff --git a/codec/values_test.go b/codec/values_test.go
index 4ec28e1..f189244 100644
--- a/codec/values_test.go
+++ b/codec/values_test.go
@@ -1,4 +1,4 @@
-// // +build testing
+/* // +build testing */
// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
// Use of this source code is governed by a MIT license found in the LICENSE file.
@@ -11,10 +11,21 @@ package codec
import (
"math"
+ "strings"
"time"
)
-var testStrucTime = time.Date(2012, 2, 2, 2, 2, 2, 2000, time.UTC).UTC()
+type wrapSliceUint64 []uint64
+type wrapSliceString []string
+type wrapUint64 uint64
+type wrapString string
+type wrapUint64Slice []wrapUint64
+type wrapStringSlice []wrapString
+
+type stringUint64T struct {
+ S string
+ U uint64
+}
type AnonInTestStruc struct {
AS string
@@ -36,16 +47,29 @@ type AnonInTestStrucIntf struct {
T time.Time
}
-type TestStruc struct {
- _struct struct{} `codec:",omitempty"` //set omitempty for every field
+type testSimpleFields struct {
+ S string
+
+ I64 int64
+ I32 int32
+ I16 int16
+ I8 int8
+
+ I64n int64
+ I32n int32
+ I16n int16
+ I8n int8
- S string
- I64 int64
- I16 int16
Ui64 uint64
+ Ui32 uint32
+ Ui16 uint16
Ui8 uint8
- B bool
- By uint8 // byte: msgp doesn't like byte
+
+ F64 float64
+ F32 float32
+
+ B bool
+ By uint8 // byte: msgp doesn't like byte
Sslice []string
I64slice []int64
@@ -59,22 +83,80 @@ type TestStruc struct {
// TODO: test these separately, specifically for reflection and codecgen.
// Unfortunately, ffjson doesn't support these. Its compilation even fails.
- // Ui64array [4]uint64
- // Ui64slicearray [][4]uint64
- AnonInTestStruc
+ Ui64array [4]uint64
+ Ui64slicearray []*[4]uint64
+ WrapSliceInt64 wrapSliceUint64
+ WrapSliceString wrapSliceString
+
+ Msi64 map[string]int64
+}
+
+type testStrucCommon struct {
+ S string
+
+ I64 int64
+ I32 int32
+ I16 int16
+ I8 int8
+
+ I64n int64
+ I32n int32
+ I16n int16
+ I8n int8
+
+ Ui64 uint64
+ Ui32 uint32
+ Ui16 uint16
+ Ui8 uint8
+
+ F64 float64
+ F32 float32
+
+ B bool
+ By uint8 // byte: msgp doesn't like byte
+
+ Sslice []string
+ I64slice []int64
+ I16slice []int16
+ Ui64slice []uint64
+ Ui8slice []uint8
+ Bslice []bool
+ Byslice []byte
+
+ Iptrslice []*int64
+
+ // TODO: test these separately, specifically for reflection and codecgen.
+ // Unfortunately, ffjson doesn't support these. Its compilation even fails.
+
+ Ui64array [4]uint64
+ Ui64slicearray []*[4]uint64
+ WrapSliceInt64 wrapSliceUint64
+ WrapSliceString wrapSliceString
- //M map[interface{}]interface{} `json:"-",bson:"-"`
Msi64 map[string]int64
+ Simplef testSimpleFields
+
+ AnonInTestStruc
+
+ NotAnon AnonInTestStruc
+
// make this a ptr, so that it could be set or not.
// for comparison (e.g. with msgp), give it a struct tag (so it is not inlined),
- // make this one omitempty (so it is included if nil).
+ // make this one omitempty (so it is excluded if nil).
*AnonInTestStrucIntf `codec:",omitempty"`
- Nmap map[string]bool //don't set this, so we can test for nil
- Nslice []byte //don't set this, so we can test for nil
- Nint64 *int64 //don't set this, so we can test for nil
+ Nmap map[string]bool //don't set this, so we can test for nil
+ Nslice []byte //don't set this, so we can test for nil
+ Nint64 *int64 //don't set this, so we can test for nil
+}
+
+type TestStruc struct {
+ _struct struct{} `codec:",omitempty"` //set omitempty for every field
+
+ testStrucCommon
+
Mtsptr map[string]*TestStruc
Mts map[string]TestStruc
Its []*TestStruc
@@ -89,19 +171,100 @@ type tLowerFirstLetter struct {
b []byte
}
-func newTestStruc(depth int, bench bool, useInterface, useStringKeyOnly bool) (ts *TestStruc) {
+// Some other types
+
+type Sstring string
+type Bbool bool
+type Sstructsmall struct {
+ A int
+}
+
+type Sstructbig struct {
+ A int
+ B bool
+ c string
+ // Sval Sstruct
+ Ssmallptr *Sstructsmall
+ Ssmall *Sstructsmall
+ Sptr *Sstructbig
+}
+
+type SstructbigMapBySlice struct {
+ _struct struct{} `codec:",toarray"`
+ A int
+ B bool
+ c string
+ // Sval Sstruct
+ Ssmallptr *Sstructsmall
+ Ssmall *Sstructsmall
+ Sptr *Sstructbig
+}
+
+type Sinterface interface {
+ Noop()
+}
+
+var testStrucTime = time.Date(2012, 2, 2, 2, 2, 2, 2000, time.UTC).UTC()
+
+func populateTestStrucCommon(ts *testStrucCommon, n int, bench, useInterface, useStringKeyOnly bool) {
var i64a, i64b, i64c, i64d int64 = 64, 6464, 646464, 64646464
- ts = &TestStruc{
- S: "some string",
+ var a = AnonInTestStruc{
+ // There's more leeway in altering this.
+ AS: strRpt(n, "A-String"),
+ AI64: -64646464,
+ AI16: 1616,
+ AUi64: 64646464,
+ // (U+1D11E)G-clef character may be represented in json as "\uD834\uDD1E".
+ // single reverse solidus character may be represented in json as "\u005C".
+ // include these in ASslice below.
+ ASslice: []string{
+ strRpt(n, "Aone"),
+ strRpt(n, "Atwo"),
+ strRpt(n, "Athree"),
+ strRpt(n, "Afour.reverse_solidus.\u005c"),
+ strRpt(n, "Afive.Gclef.\U0001d11E\"ugorji\"done.")},
+ AI64slice: []int64{1, -22, 333, -4444, 55555, -666666},
+ AMSU16: map[string]uint16{strRpt(n, "1"): 1, strRpt(n, "22"): 2, strRpt(n, "333"): 3, strRpt(n, "4444"): 4},
+ AF64slice: []float64{
+ 11.11e-11, -11.11e+11,
+ 2.222E+12, -2.222E-12,
+ -555.55E-5, 555.55E+5,
+ 666.66E-6, -666.66E+6,
+ 7777.7777E-7, -7777.7777E-7,
+ -8888.8888E+8, 8888.8888E+8,
+ -99999.9999E+9, 99999.9999E+9,
+ // these below are hairy enough to need strconv.ParseFloat
+ 33.33E-33, -33.33E+33,
+ 44.44e+44, -44.44e-44,
+ },
+ }
+
+ *ts = testStrucCommon{
+ S: strRpt(n, `some really really cool names that are nigerian and american like "ugorji melody nwoke" - get it? `),
+
+ // set the numbers close to the limits
+ I8: math.MaxInt8 * 2 / 3, // 8,
+ I8n: math.MinInt8 * 2 / 3, // 8,
+ I16: math.MaxInt16 * 2 / 3, // 16,
+ I16n: math.MinInt16 * 2 / 3, // 16,
+ I32: math.MaxInt32 * 2 / 3, // 32,
+ I32n: math.MinInt32 * 2 / 3, // 32,
I64: math.MaxInt64 * 2 / 3, // 64,
- I16: 1616,
- Ui64: uint64(int64(math.MaxInt64 * 2 / 3)), // 64, //don't use MaxUint64, as bson can't write it
- Ui8: 160,
- B: true,
- By: 5,
+ I64n: math.MinInt64 * 2 / 3, // 64,
+
+ Ui64: math.MaxUint64 * 2 / 3, // 64
+ Ui32: math.MaxUint32 * 2 / 3, // 32
+ Ui16: math.MaxUint16 * 2 / 3, // 16
+ Ui8: math.MaxUint8 * 2 / 3, // 8
- Sslice: []string{"one", "two", "three"},
+ F32: 3.402823e+38, // max representable float32 without losing precision
+ F64: 3.40281991833838838338e+53,
+
+ B: true,
+ By: 5,
+
+ Sslice: []string{strRpt(n, "one"), strRpt(n, "two"), strRpt(n, "three")},
I64slice: []int64{1111, 2222, 3333},
I16slice: []int16{44, 55, 66},
Ui64slice: []uint64{12121212, 34343434, 56565656},
@@ -110,31 +273,81 @@ func newTestStruc(depth int, bench bool, useInterface, useStringKeyOnly bool) (t
Byslice: []byte{13, 14, 15},
Msi64: map[string]int64{
- "one": 1,
- "two": 2,
+ strRpt(n, "one"): 1,
+ strRpt(n, "two"): 2,
+ strRpt(n, "\"three\""): 3,
},
- AnonInTestStruc: AnonInTestStruc{
- // There's more leeway in altering this.
- AS: "A-String",
- AI64: -64646464,
- AI16: 1616,
- AUi64: 64646464,
- // (U+1D11E)G-clef character may be represented in json as "\uD834\uDD1E".
- // single reverse solidus character may be represented in json as "\u005C".
- // include these in ASslice below.
- ASslice: []string{"Aone", "Atwo", "Athree",
- "Afour.reverse_solidus.\u005c", "Afive.Gclef.\U0001d11E"},
- AI64slice: []int64{1, -22, 333, -4444, 55555, -666666},
- AMSU16: map[string]uint16{"1": 1, "22": 2, "333": 3, "4444": 4},
- AF64slice: []float64{11.11e-11, 22.22E+22, 33.33E-33, 44.44e+44, 555.55E-6, 666.66E6},
+
+ Ui64array: [4]uint64{4, 16, 64, 256},
+
+ WrapSliceInt64: []uint64{4, 16, 64, 256},
+ WrapSliceString: []string{strRpt(n, "4"), strRpt(n, "16"), strRpt(n, "64"), strRpt(n, "256")},
+
+ // DecodeNaked bombs here, because the stringUint64T is decoded as a map,
+ // and a map cannot be the key type of a map.
+ // Thus, don't initialize this here.
+ // Msu2wss: map[stringUint64T]wrapStringSlice{
+ // {"5", 5}: []wrapString{"1", "2", "3", "4", "5"},
+ // {"3", 3}: []wrapString{"1", "2", "3"},
+ // },
+
+ // make Simplef same as top-level
+ Simplef: testSimpleFields{
+ S: strRpt(n, `some really really cool names that are nigerian and american like "ugorji melody nwoke" - get it? `),
+
+ // set the numbers close to the limits
+ I8: math.MaxInt8 * 2 / 3, // 8,
+ I8n: math.MinInt8 * 2 / 3, // 8,
+ I16: math.MaxInt16 * 2 / 3, // 16,
+ I16n: math.MinInt16 * 2 / 3, // 16,
+ I32: math.MaxInt32 * 2 / 3, // 32,
+ I32n: math.MinInt32 * 2 / 3, // 32,
+ I64: math.MaxInt64 * 2 / 3, // 64,
+ I64n: math.MinInt64 * 2 / 3, // 64,
+
+ Ui64: math.MaxUint64 * 2 / 3, // 64
+ Ui32: math.MaxUint32 * 2 / 3, // 32
+ Ui16: math.MaxUint16 * 2 / 3, // 16
+ Ui8: math.MaxUint8 * 2 / 3, // 8
+
+ F32: 3.402823e+38, // max representable float32 without losing precision
+ F64: 3.40281991833838838338e+53,
+
+ B: true,
+ By: 5,
+
+ Sslice: []string{strRpt(n, "one"), strRpt(n, "two"), strRpt(n, "three")},
+ I64slice: []int64{1111, 2222, 3333},
+ I16slice: []int16{44, 55, 66},
+ Ui64slice: []uint64{12121212, 34343434, 56565656},
+ Ui8slice: []uint8{210, 211, 212},
+ Bslice: []bool{true, false, true, false},
+ Byslice: []byte{13, 14, 15},
+
+ Msi64: map[string]int64{
+ strRpt(n, "one"): 1,
+ strRpt(n, "two"): 2,
+ strRpt(n, "\"three\""): 3,
+ },
+
+ Ui64array: [4]uint64{4, 16, 64, 256},
+
+ WrapSliceInt64: []uint64{4, 16, 64, 256},
+ WrapSliceString: []string{strRpt(n, "4"), strRpt(n, "16"), strRpt(n, "64"), strRpt(n, "256")},
},
+
+ AnonInTestStruc: a,
+ NotAnon: a,
}
+
+ ts.Ui64slicearray = []*[4]uint64{&ts.Ui64array, &ts.Ui64array}
+
if useInterface {
ts.AnonInTestStrucIntf = &AnonInTestStrucIntf{
- Islice: []interface{}{"true", true, "no", false, uint64(288), float64(0.4)},
+ Islice: []interface{}{strRpt(n, "true"), true, strRpt(n, "no"), false, uint64(288), float64(0.4)},
Ms: map[string]interface{}{
- "true": "true",
- "int64(9)": false,
+ strRpt(n, "true"): strRpt(n, "true"),
+ strRpt(n, "int64(9)"): false,
},
T: testStrucTime,
}
@@ -154,6 +367,11 @@ func newTestStruc(depth int, bench bool, useInterface, useStringKeyOnly bool) (t
if !useStringKeyOnly {
// ts.AnonInTestStruc.AMU32F64 = map[uint32]float64{1: 1, 2: 2, 3: 3} // Json/Bson barf
}
+}
+
+func newTestStruc(depth, n int, bench, useInterface, useStringKeyOnly bool) (ts *TestStruc) {
+ ts = &TestStruc{}
+ populateTestStrucCommon(&ts.testStrucCommon, n, bench, useInterface, useStringKeyOnly)
if depth > 0 {
depth--
if ts.Mtsptr == nil {
@@ -162,42 +380,13 @@ func newTestStruc(depth int, bench bool, useInterface, useStringKeyOnly bool) (t
if ts.Mts == nil {
ts.Mts = make(map[string]TestStruc)
}
- ts.Mtsptr["0"] = newTestStruc(depth, bench, useInterface, useStringKeyOnly)
- ts.Mts["0"] = *(ts.Mtsptr["0"])
- ts.Its = append(ts.Its, ts.Mtsptr["0"])
+ ts.Mtsptr[strRpt(n, "0")] = newTestStruc(depth, n, bench, useInterface, useStringKeyOnly)
+ ts.Mts[strRpt(n, "0")] = *(ts.Mtsptr[strRpt(n, "0")])
+ ts.Its = append(ts.Its, ts.Mtsptr[strRpt(n, "0")])
}
return
}
-// Some other types
-
-type Sstring string
-type Bbool bool
-type Sstructsmall struct {
- A int
-}
-
-type Sstructbig struct {
- A int
- B bool
- c string
- // Sval Sstruct
- Ssmallptr *Sstructsmall
- Ssmall *Sstructsmall
- Sptr *Sstructbig
-}
-
-type SstructbigMapBySlice struct {
- _struct struct{} `codec:",toarray"`
- A int
- B bool
- c string
- // Sval Sstruct
- Ssmallptr *Sstructsmall
- Ssmall *Sstructsmall
- Sptr *Sstructbig
-}
-
-type Sinterface interface {
- Noop()
+func strRpt(n int, s string) string {
+ return strings.Repeat(s, n)
}
diff --git a/codec/x_bench_gen_test.go b/codec/x_bench_gen_test.go
new file mode 100644
index 0000000..e7c5276
--- /dev/null
+++ b/codec/x_bench_gen_test.go
@@ -0,0 +1,123 @@
+// +build x
+// +build generated
+
+// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+package codec
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+ "testing"
+
+ "github.com/mailru/easyjson"
+ "github.com/pquerna/ffjson/ffjson"
+ "github.com/tinylib/msgp/msgp"
+)
+
+/*
+ To update all these, use:
+ go get -u github.com/tinylib/msgp/msgp github.com/tinylib/msgp \
+ github.com/pquerna/ffjson/ffjson github.com/pquerna/ffjson \
+ github.com/mailru/easyjson/...
+
+ Known Issues with external libraries:
+ - msgp io.R/W support doesn't work. It throws error
+
+*/
+
+func init() {
+ testPreInitFns = append(testPreInitFns, benchXGenPreInit)
+}
+
+func benchXGenPreInit() {
+ benchCheckers = append(benchCheckers,
+ benchChecker{"msgp", fnMsgpEncodeFn, fnMsgpDecodeFn},
+ benchChecker{"easyjson", fnEasyjsonEncodeFn, fnEasyjsonDecodeFn},
+ benchChecker{"ffjson", fnFfjsonEncodeFn, fnFfjsonDecodeFn},
+ )
+}
+
+func fnEasyjsonEncodeFn(ts interface{}, bsIn []byte) ([]byte, error) {
+ if _, ok := ts.(easyjson.Marshaler); !ok {
+ return nil, errors.New("easyjson: input is not a easyjson.Marshaler")
+ }
+ if testUseIoEncDec >= 0 {
+ buf := new(bytes.Buffer)
+ _, err := easyjson.MarshalToWriter(ts.(easyjson.Marshaler), buf)
+ return buf.Bytes(), err
+ }
+ return easyjson.Marshal(ts.(easyjson.Marshaler))
+ // return ts.(json.Marshaler).MarshalJSON()
+}
+
+func fnEasyjsonDecodeFn(buf []byte, ts interface{}) error {
+ if _, ok := ts.(easyjson.Unmarshaler); !ok {
+ return errors.New("easyjson: input is not a easyjson.Unmarshaler")
+ }
+ if testUseIoEncDec >= 0 {
+ return easyjson.UnmarshalFromReader(bytes.NewReader(buf), ts.(easyjson.Unmarshaler))
+ }
+ return easyjson.Unmarshal(buf, ts.(easyjson.Unmarshaler))
+ // return ts.(json.Unmarshaler).UnmarshalJSON(buf)
+}
+
+func fnFfjsonEncodeFn(ts interface{}, bsIn []byte) ([]byte, error) {
+ return ffjson.Marshal(ts)
+ // return ts.(json.Marshaler).MarshalJSON()
+}
+
+func fnFfjsonDecodeFn(buf []byte, ts interface{}) error {
+ return ffjson.Unmarshal(buf, ts)
+ // return ts.(json.Unmarshaler).UnmarshalJSON(buf)
+}
+
+func fnMsgpEncodeFn(ts interface{}, bsIn []byte) ([]byte, error) {
+ if _, ok := ts.(msgp.Encodable); !ok {
+ return nil, fmt.Errorf("msgp: input of type %T is not a msgp.Encodable", ts)
+ }
+ if testUseIoEncDec >= 0 {
+ buf := fnBenchmarkByteBuf(bsIn)
+ err := ts.(msgp.Encodable).EncodeMsg(msgp.NewWriter(buf))
+ return buf.Bytes(), err
+ }
+ return ts.(msgp.Marshaler).MarshalMsg(bsIn[:0]) // msgp appends to slice.
+}
+
+func fnMsgpDecodeFn(buf []byte, ts interface{}) (err error) {
+ if _, ok := ts.(msgp.Decodable); !ok {
+ return fmt.Errorf("msgp: input of type %T is not a msgp.Decodable", ts)
+ }
+ if testUseIoEncDec >= 0 {
+ err = ts.(msgp.Decodable).DecodeMsg(msgp.NewReader(bytes.NewReader(buf)))
+ return
+ }
+ _, err = ts.(msgp.Unmarshaler).UnmarshalMsg(buf)
+ return
+}
+
+func Benchmark__Msgp_______Encode(b *testing.B) {
+ fnBenchmarkEncode(b, "msgp", benchTs, fnMsgpEncodeFn)
+}
+
+func Benchmark__Msgp_______Decode(b *testing.B) {
+ fnBenchmarkDecode(b, "msgp", benchTs, fnMsgpEncodeFn, fnMsgpDecodeFn, fnBenchNewTs)
+}
+
+func Benchmark__Easyjson___Encode(b *testing.B) {
+ fnBenchmarkEncode(b, "easyjson", benchTs, fnEasyjsonEncodeFn)
+}
+
+func Benchmark__Easyjson___Decode(b *testing.B) {
+ fnBenchmarkDecode(b, "easyjson", benchTs, fnEasyjsonEncodeFn, fnEasyjsonDecodeFn, fnBenchNewTs)
+}
+
+func Benchmark__Ffjson_____Encode(b *testing.B) {
+ fnBenchmarkEncode(b, "ffjson", benchTs, fnFfjsonEncodeFn)
+}
+
+func Benchmark__Ffjson_____Decode(b *testing.B) {
+ fnBenchmarkDecode(b, "ffjson", benchTs, fnFfjsonEncodeFn, fnFfjsonDecodeFn, fnBenchNewTs)
+}
diff --git a/codec/xml.go b/codec/xml.go
new file mode 100644
index 0000000..9386775
--- /dev/null
+++ b/codec/xml.go
@@ -0,0 +1,426 @@
+// +build ignore
+
+package codec
+
+import "reflect"
+
+/*
+
+A strict Non-validating namespace-aware XML 1.0 parser and (en|de)coder.
+
+We are attempting this due to perceived issues with encoding/xml:
+ - Complicated. It tried to do too much, and is not as simple to use as json.
+ - Due to over-engineering, reflection is over-used AND performance suffers:
+ java is 6X faster:http://fabsk.eu/blog/category/informatique/dev/golang/
+ even PYTHON performs better: http://outgoing.typepad.com/outgoing/2014/07/exploring-golang.html
+
+codec framework will offer the following benefits
+ - VASTLY improved performance (when using reflection-mode or codecgen)
+ - simplicity and consistency: with the rest of the supported formats
+ - all other benefits of codec framework (streaming, codegeneration, etc)
+
+codec is not a drop-in replacement for encoding/xml.
+It is a replacement, based on the simplicity and performance of codec.
+Look at it like JAXB for Go.
+
+Challenges:
+
+ - Need to output XML preamble, with all namespaces at the right location in the output.
+ - Each "end" block is dynamic, so we need to maintain a context-aware stack
+ - How to decide when to use an attribute VS an element
+ - How to handle chardata, attr, comment EXPLICITLY.
+ - Should it output fragments?
+ e.g. encoding a bool should just output true OR false, which is not well-formed XML.
+
+Extend the struct tag. See representative example:
+ type X struct {
+ ID uint8 codec:"xid|http://ugorji.net/x-namespace id,omitempty,toarray,attr,cdata"
+ }
+
+Based on this, we encode
+ - fields as elements, BUT encode as attributes if struct tag contains ",attr".
+ - text as entity-escaped text, BUT encode as CDATA if struct tag contains ",cdata".
+
+In this mode, we only encode as attribute if ",attr" is found, and only encode as CDATA
+if ",cdata" is found in the struct tag.
+
+To handle namespaces:
+ - XMLHandle is denoted as being namespace-aware.
+ Consequently, we WILL use the ns:name pair to encode and decode if defined, else use the plain name.
+ - *Encoder and *Decoder know whether the Handle "prefers" namespaces.
+ - add *Encoder.getEncName(*structFieldInfo).
+ No one calls *structFieldInfo.indexForEncName directly anymore
+ - add *Decoder.getStructFieldInfo(encName string) // encName here is either like abc, or h1:nsabc
+ No one accesses .encName anymore except in
+ - let encode.go and decode.go use these (for consistency)
+ - only problem exists for gen.go, where we create a big switch on encName.
+ Now, we also have to add a switch on strings.endsWith(kName, encNsName)
+ - gen.go will need to have many more methods, and then double-on the 2 switch loops like:
+ switch k {
+ case "abc" : x.abc()
+ case "def" : x.def()
+ default {
+ switch {
+ case !nsAware: panic(...)
+ case strings.endsWith("nsabc"): x.abc()
+ default: panic(...)
+ }
+ }
+ }
+
+The structure below accomodates this:
+
+ type typeInfo struct {
+ sfi []*structFieldInfo // sorted by encName
+ sfins // sorted by namespace
+ sfia // sorted, to have those with attributes at the top. Needed to write XML appropriately.
+ sfip // unsorted
+ }
+ type structFieldInfo struct {
+ encName
+ nsEncName
+ ns string
+ attr bool
+ cdata bool
+ }
+
+indexForEncName is now an internal helper function that takes a sorted array
+(one of ti.sfins or ti.sfi). It is only used by *Encoder.getStructFieldInfo(...)
+
+There will be a separate parser from the builder.
+The parser will have a method: next() xmlToken method.
+
+xmlToken has fields:
+ - type uint8: 0 | ElementStart | ElementEnd | AttrKey | AttrVal | Text
+ - value string
+ - ns string
+
+SEE: http://www.xml.com/pub/a/98/10/guide0.html?page=3#ENTDECL
+
+The following are skipped when parsing:
+ - External Entities (from external file)
+ - Notation Declaration e.g. <!NOTATION GIF87A SYSTEM "GIF">
+ - Entity Declarations & References
+ - XML Declaration (assume UTF-8)
+ - XML Directive i.e. <! ... >
+ - Other Declarations: Notation, etc.
+ - Comment
+ - Processing Instruction
+ - schema / DTD for validation:
+ We are not a VALIDATING parser. Validation is done elsewhere.
+ However, some parts of the DTD internal subset are used (SEE BELOW).
+ For Attribute List Declarations e.g.
+ <!ATTLIST foo:oldjoke name ID #REQUIRED label CDATA #IMPLIED status ( funny | notfunny ) 'funny' >
+ We considered using the ATTLIST to get "default" value, but not to validate the contents. (VETOED)
+
+The following XML features are supported
+ - Namespace
+ - Element
+ - Attribute
+ - cdata
+ - Unicode escape
+
+The following DTD (when as an internal sub-set) features are supported:
+ - Internal Entities e.g.
+ <!ELEMENT burns "ugorji is cool" > AND entities for the set: [<>&"']
+ - Parameter entities e.g.
+ <!ENTITY % personcontent "ugorji is cool"> <!ELEMENT burns (%personcontent;)*>
+
+At decode time, a structure containing the following is kept
+ - namespace mapping
+ - default attribute values
+ - all internal entities (<>&"' and others written in the document)
+
+When decode starts, it parses XML namespace declarations and creates a map in the
+xmlDecDriver. While parsing, that map continously gets updated.
+The only problem happens when a namespace declaration happens on the node that it defines.
+e.g. <hn:name xmlns:hn="http://www.ugorji.net" >
+To handle this, each Element must be fully parsed at a time,
+even if it amounts to multiple tokens which are returned one at a time on request.
+
+xmlns is a special attribute name.
+ - It is used to define namespaces, including the default
+ - It is never returned as an AttrKey or AttrVal.
+ *We may decide later to allow user to use it e.g. you want to parse the xmlns mappings into a field.*
+
+Number, bool, null, mapKey, etc can all be decoded from any xmlToken.
+This accomodates map[int]string for example.
+
+It should be possible to create a schema from the types,
+or vice versa (generate types from schema with appropriate tags).
+This is however out-of-scope from this parsing project.
+
+We should write all namespace information at the first point that it is referenced in the tree,
+and use the mapping for all child nodes and attributes. This means that state is maintained
+at a point in the tree. This also means that calls to Decode or MustDecode will reset some state.
+
+When decoding, it is important to keep track of entity references and default attribute values.
+It seems these can only be stored in the DTD components. We should honor them when decoding.
+
+Configuration for XMLHandle will look like this:
+
+ XMLHandle
+ DefaultNS string
+ // Encoding:
+ NS map[string]string // ns URI to key, used for encoding
+ // Decoding: in case ENTITY declared in external schema or dtd, store info needed here
+ Entities map[string]string // map of entity rep to character
+
+
+During encode, if a namespace mapping is not defined for a namespace found on a struct,
+then we create a mapping for it using nsN (where N is 1..1000000, and doesn't conflict
+with any other namespace mapping).
+
+Note that different fields in a struct can have different namespaces.
+However, all fields will default to the namespace on the _struct field (if defined).
+
+An XML document is a name, a map of attributes and a list of children.
+Consequently, we cannot "DecodeNaked" into a map[string]interface{} (for example).
+We have to "DecodeNaked" into something that resembles XML data.
+
+To support DecodeNaked (decode into nil interface{}) we have to define some "supporting" types:
+ type Name struct { // Prefered. Less allocations due to conversions.
+ Local string
+ Space string
+ }
+ type Element struct {
+ Name Name
+ Attrs map[Name]string
+ Children []interface{} // each child is either *Element or string
+ }
+Only two "supporting" types are exposed for XML: Name and Element.
+
+We considered 'type Name string' where Name is like "Space Local" (space-separated).
+We decided against it, because each creation of a name would lead to
+double allocation (first convert []byte to string, then concatenate them into a string).
+The benefit is that it is faster to read Attrs from a map. But given that Element is a value
+object, we want to eschew methods and have public exposed variables.
+
+We also considered the following, where xml types were not value objects, and we used
+intelligent accessor methods to extract information and for performance.
+*** WE DECIDED AGAINST THIS. ***
+ type Attr struct {
+ Name Name
+ Value string
+ }
+ // Element is a ValueObject: There are no accessor methods.
+ // Make element self-contained.
+ type Element struct {
+ Name Name
+ attrsMap map[string]string // where key is "Space Local"
+ attrs []Attr
+ childrenT []string
+ childrenE []Element
+ childrenI []int // each child is a index into T or E.
+ }
+ func (x *Element) child(i) interface{} // returns string or *Element
+
+Per XML spec and our default handling, white space is insignificant between elements,
+specifically between parent-child or siblings. White space occuring alone between start
+and end element IS significant. However, if xml:space='preserve', then we 'preserve'
+all whitespace. This is more critical when doing a DecodeNaked, but MAY not be as critical
+when decoding into a typed value.
+
+**Note: there is no xml: namespace. The xml: attributes were defined before namespaces.**
+**So treat them as just "directives" that should be interpreted to mean something**.
+
+On encoding, we don't add any prettifying markup (indenting, etc).
+
+A document or element can only be encoded/decoded from/to a struct. In this mode:
+ - struct name maps to element name (or tag-info from _struct field)
+ - fields are mapped to child elements or attributes
+
+A map is either encoded as attributes on current element, or as a set of child elements.
+Maps are encoded as attributes iff their keys and values are primitives (number, bool, string).
+
+A list is encoded as a set of child elements.
+
+Primitives (number, bool, string) are encoded as an element, attribute or text
+depending on the context.
+
+Extensions must encode themselves as a text string.
+
+Encoding is tough, specifically when encoding mappings, because we need to encode
+as either attribute or element. To do this, we need to default to encoding as attributes,
+and then let Encoder inform the Handle when to start encoding as nodes.
+i.e. Encoder does something like:
+
+ h.EncodeMapStart()
+ h.Encode(), h.Encode(), ...
+ h.EncodeMapNotAttrSignal() // this is not a bool, because it's a signal
+ h.Encode(), h.Encode(), ...
+ h.EncodeEnd()
+
+Only XMLHandle understands this, and will set itself to start encoding as elements.
+
+This support extends to maps. For example, if a struct field is a map, and it has
+the struct tag signifying it should be attr, then all its fields are encoded as attributes.
+e.g.
+
+ type X struct {
+ M map[string]int `codec:"m,attr"` // encode as attributes
+ }
+
+Question:
+ - if encoding a map, what if map keys have spaces in them???
+ Then they cannot be attributes or child elements. Error.
+
+Misc:
+
+ - For attribute values, normalize by trimming beginning and ending white space,
+ and converting every white space sequence to a single space.
+ - ATTLIST restrictions are enforced.
+ e.g. default value of xml:space, skipping xml:XYZ style attributes, etc.
+ - Consider supporting NON-STRICT mode (e.g. to handle HTML parsing).
+ Some elements e.g. br, hr, etc need not close and should be auto-closed
+ ... (see http://www.w3.org/TR/html4/loose.dtd)
+ An expansive set of entities are pre-defined.
+ - Have easy way to create a HTML parser:
+ add a HTML() method to XMLHandle, that will set Strict=false, specify AutoClose,
+ and add HTML Entities to the list.
+ - Support validating element/attribute XMLName before writing it.
+ Keep this behind a flag, which is set to false by default (for performance).
+ type XMLHandle struct {
+ CheckName bool
+ }
+
+ROADMAP (1 weeks):
+ - build encoder (1 day)
+ - build decoder (based off xmlParser) (1 day)
+ - implement xmlParser (2 days).
+ Look at encoding/xml for inspiration.
+ - integrate and TEST (1 days)
+ - write article and post it (1 day)
+
+
+*/
+
+// ----------- PARSER -------------------
+
+type xmlTokenType uint8
+
+const (
+ _ xmlTokenType = iota << 1
+ xmlTokenElemStart
+ xmlTokenElemEnd
+ xmlTokenAttrKey
+ xmlTokenAttrVal
+ xmlTokenText
+)
+
+type xmlToken struct {
+ Type xmlTokenType
+ Value string
+ Namespace string // blank for AttrVal and Text
+}
+
+type xmlParser struct {
+ r decReader
+ toks []xmlToken // list of tokens.
+ ptr int // ptr into the toks slice
+ done bool // nothing else to parse. r now returns EOF.
+}
+
+func (x *xmlParser) next() (t *xmlToken) {
+ // once x.done, or x.ptr == len(x.toks) == 0, then return nil (to signify finish)
+ if !x.done && len(x.toks) == 0 {
+ x.nextTag()
+ }
+ // parses one element at a time (into possible many tokens)
+ if x.ptr < len(x.toks) {
+ t = &(x.toks[x.ptr])
+ x.ptr++
+ if x.ptr == len(x.toks) {
+ x.ptr = 0
+ x.toks = x.toks[:0]
+ }
+ }
+ return
+}
+
+// nextTag will parses the next element and fill up toks.
+// It set done flag if/once EOF is reached.
+func (x *xmlParser) nextTag() {
+ // TODO: implement.
+}
+
+// ----------- ENCODER -------------------
+
+type xmlEncDriver struct {
+ e *Encoder
+ w encWriter
+ h *XMLHandle
+ b [64]byte // scratch
+ bs []byte // scratch
+ // s jsonStack
+ noBuiltInTypes
+}
+
+// ----------- DECODER -------------------
+
+type xmlDecDriver struct {
+ d *Decoder
+ h *XMLHandle
+ r decReader // *bytesDecReader decReader
+ ct valueType // container type. one of unset, array or map.
+ bstr [8]byte // scratch used for string \UXXX parsing
+ b [64]byte // scratch
+
+ // wsSkipped bool // whitespace skipped
+
+ // s jsonStack
+
+ noBuiltInTypes
+}
+
+// DecodeNaked will decode into an XMLNode
+
+// XMLName is a value object representing a namespace-aware NAME
+type XMLName struct {
+ Local string
+ Space string
+}
+
+// XMLNode represents a "union" of the different types of XML Nodes.
+// Only one of fields (Text or *Element) is set.
+type XMLNode struct {
+ Element *Element
+ Text string
+}
+
+// XMLElement is a value object representing an fully-parsed XML element.
+type XMLElement struct {
+ Name Name
+ Attrs map[XMLName]string
+ // Children is a list of child nodes, each being a *XMLElement or string
+ Children []XMLNode
+}
+
+// ----------- HANDLE -------------------
+
+type XMLHandle struct {
+ BasicHandle
+ textEncodingType
+
+ DefaultNS string
+ NS map[string]string // ns URI to key, for encoding
+ Entities map[string]string // entity representation to string, for encoding.
+}
+
+func (h *XMLHandle) newEncDriver(e *Encoder) encDriver {
+ return &xmlEncDriver{e: e, w: e.w, h: h}
+}
+
+func (h *XMLHandle) newDecDriver(d *Decoder) decDriver {
+ // d := xmlDecDriver{r: r.(*bytesDecReader), h: h}
+ hd := xmlDecDriver{d: d, r: d.r, h: h}
+ hd.n.bytes = d.b[:]
+ return &hd
+}
+
+func (h *XMLHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) {
+ return h.SetExt(rt, tag, &setExtWrapper{i: ext})
+}
+
+var _ decDriver = (*xmlDecDriver)(nil)
+var _ encDriver = (*xmlEncDriver)(nil)
diff --git a/codec/z.go b/codec/z.go
new file mode 100644
index 0000000..b6ac076
--- /dev/null
+++ b/codec/z.go
@@ -0,0 +1,23 @@
+// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+package codec
+
+import "sort"
+
+// TODO: this is brittle, as it depends on z.go's init() being called last.
+// The current build tools all honor that files are passed in lexical order.
+// However, we should consider using an init_channel,
+// that each person doing init will write to.
+
+func init() {
+ if !useLookupRecognizedTypes {
+ return
+ }
+ sort.Sort(uintptrSlice(recognizedRtids))
+ sort.Sort(uintptrSlice(recognizedRtidPtrs))
+ recognizedRtidOrPtrs = make([]uintptr, len(recognizedRtids)+len(recognizedRtidPtrs))
+ copy(recognizedRtidOrPtrs, recognizedRtids)
+ copy(recognizedRtidOrPtrs[len(recognizedRtids):], recognizedRtidPtrs)
+ sort.Sort(uintptrSlice(recognizedRtidOrPtrs))
+}
diff --git a/codec/z_all_test.go b/codec/z_all_test.go
new file mode 100644
index 0000000..b4a97fa
--- /dev/null
+++ b/codec/z_all_test.go
@@ -0,0 +1,266 @@
+// +build alltests
+// +build go1.7
+
+package codec
+
+// Run this using:
+// go test -tags=alltests -run=Suite -coverprofile=cov.out
+// go tool cover -html=cov.out
+//
+// Because build tags are a build time parameter, we will have to test out the
+// different tags separately.
+// Tags: x codecgen safe appengine notfastpath
+//
+// These tags should be added to alltests, e.g.
+// go test '-tags=alltests x codecgen' -run=Suite -coverprofile=cov.out
+//
+// To run all tests before submitting code, run:
+// a=( "" "safe" "codecgen" "notfastpath" "codecgen notfastpath" "codecgen safe" "safe notfastpath" )
+// for i in "${a[@]}"; do echo ">>>> TAGS: $i"; go test "-tags=alltests $i" -run=Suite; done
+//
+// This only works on go1.7 and above. This is when subtests and suites were supported.
+
+import "testing"
+
+// func TestMain(m *testing.M) {
+// println("calling TestMain")
+// // set some parameters
+// exitcode := m.Run()
+// os.Exit(exitcode)
+// }
+
+func testGroupResetFlags() {
+ testUseMust = false
+ testCanonical = false
+ testUseMust = false
+ testInternStr = false
+ testUseIoEncDec = -1
+ testStructToArray = false
+ testCheckCircRef = false
+ testUseReset = false
+ testMaxInitLen = 0
+ testUseIoWrapper = false
+ testNumRepeatString = 8
+}
+
+func testSuite(t *testing.T, f func(t *testing.T)) {
+ // find . -name "*_test.go" | xargs grep -e 'flag.' | cut -d '&' -f 2 | cut -d ',' -f 1 | grep -e '^test'
+ // Disregard the following: testVerbose, testInitDebug, testSkipIntf, testJsonIndent (Need a test for it)
+
+ testReinit() // so flag.Parse() is called first, and never called again
+
+ testDecodeOptions = DecodeOptions{}
+ testEncodeOptions = EncodeOptions{}
+
+ testGroupResetFlags()
+
+ testReinit()
+ t.Run("optionsFalse", f)
+
+ testCanonical = true
+ testUseMust = true
+ testInternStr = true
+ testUseIoEncDec = 0
+ testStructToArray = true
+ testCheckCircRef = true
+ testUseReset = true
+ testDecodeOptions.MapValueReset = true
+ testReinit()
+ t.Run("optionsTrue", f)
+
+ testUseIoWrapper = true
+ testReinit()
+ t.Run("optionsTrue-ioWrapper", f)
+
+ testUseIoEncDec = -1
+
+ testDepth = 6
+ testReinit()
+ t.Run("optionsTrue-deepstruct", f)
+
+ // make buffer small enough so that we have to re-fill multiple times.
+ testSkipRPCTests = true
+ testUseIoEncDec = 128
+ // testDecodeOptions.ReaderBufferSize = 128
+ // testEncodeOptions.WriterBufferSize = 128
+ testReinit()
+ t.Run("optionsTrue-bufio", f)
+ // testDecodeOptions.ReaderBufferSize = 0
+ // testEncodeOptions.WriterBufferSize = 0
+ testUseIoEncDec = -1
+ testSkipRPCTests = false
+
+ testNumRepeatString = 32
+ testReinit()
+ t.Run("optionsTrue-largestrings", f)
+
+ // The following here MUST be tested individually, as they create
+ // side effects i.e. the decoded value is different.
+ // testDecodeOptions.MapValueReset = true // ok - no side effects
+ // testDecodeOptions.InterfaceReset = true // error??? because we do deepEquals to verify
+ // testDecodeOptions.ErrorIfNoField = true // error, as expected, as fields not there
+ // testDecodeOptions.ErrorIfNoArrayExpand = true // no error, but no error case either
+ // testDecodeOptions.PreferArrayOverSlice = true // error??? because slice != array.
+ // .... however, update deepEqual to take this option
+ // testReinit()
+ // t.Run("optionsTrue-resetOptions", f)
+
+ testGroupResetFlags()
+}
+
+/*
+z='codec_test.go'
+find . -name "$z" | xargs grep -e '^func Test' | \
+ cut -d '(' -f 1 | cut -d ' ' -f 2 | \
+ while read f; do echo "t.Run(\"$f\", $f)"; done
+*/
+
+func testCodecGroup(t *testing.T) {
+ // println("running testcodecsuite")
+ // <setup code>
+
+ t.Run("TestBincCodecsTable", TestBincCodecsTable)
+ t.Run("TestBincCodecsMisc", TestBincCodecsMisc)
+ t.Run("TestBincCodecsEmbeddedPointer", TestBincCodecsEmbeddedPointer)
+ t.Run("TestBincStdEncIntf", TestBincStdEncIntf)
+ t.Run("TestBincMammoth", TestBincMammoth)
+ t.Run("TestSimpleCodecsTable", TestSimpleCodecsTable)
+ t.Run("TestSimpleCodecsMisc", TestSimpleCodecsMisc)
+ t.Run("TestSimpleCodecsEmbeddedPointer", TestSimpleCodecsEmbeddedPointer)
+ t.Run("TestSimpleStdEncIntf", TestSimpleStdEncIntf)
+ t.Run("TestSimpleMammoth", TestSimpleMammoth)
+ t.Run("TestMsgpackCodecsTable", TestMsgpackCodecsTable)
+ t.Run("TestMsgpackCodecsMisc", TestMsgpackCodecsMisc)
+ t.Run("TestMsgpackCodecsEmbeddedPointer", TestMsgpackCodecsEmbeddedPointer)
+ t.Run("TestMsgpackStdEncIntf", TestMsgpackStdEncIntf)
+ t.Run("TestMsgpackMammoth", TestMsgpackMammoth)
+ t.Run("TestCborCodecsTable", TestCborCodecsTable)
+ t.Run("TestCborCodecsMisc", TestCborCodecsMisc)
+ t.Run("TestCborCodecsEmbeddedPointer", TestCborCodecsEmbeddedPointer)
+ t.Run("TestCborMapEncodeForCanonical", TestCborMapEncodeForCanonical)
+ t.Run("TestCborCodecChan", TestCborCodecChan)
+ t.Run("TestCborStdEncIntf", TestCborStdEncIntf)
+ t.Run("TestCborMammoth", TestCborMammoth)
+ t.Run("TestJsonCodecsTable", TestJsonCodecsTable)
+ t.Run("TestJsonCodecsMisc", TestJsonCodecsMisc)
+ t.Run("TestJsonCodecsEmbeddedPointer", TestJsonCodecsEmbeddedPointer)
+ t.Run("TestJsonCodecChan", TestJsonCodecChan)
+ t.Run("TestJsonStdEncIntf", TestJsonStdEncIntf)
+ t.Run("TestJsonMammoth", TestJsonMammoth)
+ t.Run("TestJsonRaw", TestJsonRaw)
+ t.Run("TestBincRaw", TestBincRaw)
+ t.Run("TestMsgpackRaw", TestMsgpackRaw)
+ t.Run("TestSimpleRaw", TestSimpleRaw)
+ t.Run("TestCborRaw", TestCborRaw)
+ t.Run("TestAllEncCircularRef", TestAllEncCircularRef)
+ t.Run("TestAllAnonCycle", TestAllAnonCycle)
+ t.Run("TestBincRpcGo", TestBincRpcGo)
+ t.Run("TestSimpleRpcGo", TestSimpleRpcGo)
+ t.Run("TestMsgpackRpcGo", TestMsgpackRpcGo)
+ t.Run("TestCborRpcGo", TestCborRpcGo)
+ t.Run("TestJsonRpcGo", TestJsonRpcGo)
+ t.Run("TestMsgpackRpcSpec", TestMsgpackRpcSpec)
+ t.Run("TestBincUnderlyingType", TestBincUnderlyingType)
+ t.Run("TestJsonLargeInteger", TestJsonLargeInteger)
+ t.Run("TestJsonDecodeNonStringScalarInStringContext", TestJsonDecodeNonStringScalarInStringContext)
+ t.Run("TestJsonEncodeIndent", TestJsonEncodeIndent)
+ // <tear-down code>
+}
+
+func testJsonGroup(t *testing.T) {
+ t.Run("TestJsonCodecsTable", TestJsonCodecsTable)
+ t.Run("TestJsonCodecsMisc", TestJsonCodecsMisc)
+ t.Run("TestJsonCodecsEmbeddedPointer", TestJsonCodecsEmbeddedPointer)
+ t.Run("TestJsonCodecChan", TestJsonCodecChan)
+ t.Run("TestJsonStdEncIntf", TestJsonStdEncIntf)
+ t.Run("TestJsonMammoth", TestJsonMammoth)
+ t.Run("TestJsonRaw", TestJsonRaw)
+ t.Run("TestJsonRpcGo", TestJsonRpcGo)
+ t.Run("TestJsonLargeInteger", TestJsonLargeInteger)
+ t.Run("TestJsonDecodeNonStringScalarInStringContext", TestJsonDecodeNonStringScalarInStringContext)
+ t.Run("TestJsonEncodeIndent", TestJsonEncodeIndent)
+}
+
+func testBincGroup(t *testing.T) {
+ t.Run("TestBincCodecsTable", TestBincCodecsTable)
+ t.Run("TestBincCodecsMisc", TestBincCodecsMisc)
+ t.Run("TestBincCodecsEmbeddedPointer", TestBincCodecsEmbeddedPointer)
+ t.Run("TestBincStdEncIntf", TestBincStdEncIntf)
+ t.Run("TestBincMammoth", TestBincMammoth)
+ t.Run("TestBincRaw", TestBincRaw)
+ t.Run("TestSimpleRpcGo", TestSimpleRpcGo)
+ t.Run("TestBincUnderlyingType", TestBincUnderlyingType)
+}
+
+func testCborGroup(t *testing.T) {
+ t.Run("TestCborCodecsTable", TestCborCodecsTable)
+ t.Run("TestCborCodecsMisc", TestCborCodecsMisc)
+ t.Run("TestCborCodecsEmbeddedPointer", TestCborCodecsEmbeddedPointer)
+ t.Run("TestCborMapEncodeForCanonical", TestCborMapEncodeForCanonical)
+ t.Run("TestCborCodecChan", TestCborCodecChan)
+ t.Run("TestCborStdEncIntf", TestCborStdEncIntf)
+ t.Run("TestCborMammoth", TestCborMammoth)
+ t.Run("TestCborRaw", TestCborRaw)
+ t.Run("TestCborRpcGo", TestCborRpcGo)
+}
+
+func TestCodecSuite(t *testing.T) {
+ testSuite(t, testCodecGroup)
+
+ testGroupResetFlags()
+
+ oldIndent, oldCharsAsis, oldPreferFloat := testJsonH.Indent, testJsonH.HTMLCharsAsIs, testJsonH.PreferFloat
+
+ testMaxInitLen = 10
+ testJsonH.Indent = 8
+ testJsonH.HTMLCharsAsIs = true
+ // testJsonH.PreferFloat = true
+ testReinit()
+ t.Run("json-spaces-htmlcharsasis-initLen10", testJsonGroup)
+
+ testMaxInitLen = 10
+ testJsonH.Indent = -1
+ testJsonH.HTMLCharsAsIs = false
+ // testJsonH.PreferFloat = false
+ testReinit()
+ t.Run("json-tabs-initLen10", testJsonGroup)
+
+ testJsonH.Indent, testJsonH.HTMLCharsAsIs, testJsonH.PreferFloat = oldIndent, oldCharsAsis, oldPreferFloat
+
+ oldIndefLen := testCborH.IndefiniteLength
+
+ testCborH.IndefiniteLength = true
+ testReinit()
+ t.Run("cbor-indefinitelength", testCborGroup)
+
+ testCborH.IndefiniteLength = oldIndefLen
+
+ oldSymbols := testBincH.getBasicHandle().AsSymbols
+
+ testBincH.getBasicHandle().AsSymbols = AsSymbolNone
+ testReinit()
+ t.Run("binc-no-symbols", testBincGroup)
+
+ testBincH.getBasicHandle().AsSymbols = AsSymbolAll
+ testReinit()
+ t.Run("binc-all-symbols", testBincGroup)
+
+ testBincH.getBasicHandle().AsSymbols = oldSymbols
+
+ testGroupResetFlags()
+}
+
+// func TestCodecSuite(t *testing.T) { testSuite2(t, testCodecGroup2) }
+// func testCodecGroup2(t *testing.T) {
+// t.Run("TestJsonCodecsTable", TestJsonCodecsTable)
+// t.Run("TestJsonCodecsMisc", TestJsonCodecsMisc)
+// }
+// func testSuite2(t *testing.T, f func(t *testing.T)) {
+// testUseIoEncDec = true
+// testDecodeOptions = DecodeOptions{}
+// testEncodeOptions = EncodeOptions{}
+// testDecodeOptions.ReaderBufferSize = 128
+// testEncodeOptions.WriterBufferSize = 128
+// testReinit()
+// t.Run("optionsTrue-bufio", f)
+// }
diff --git a/codec/z_all_x_bench_gen_test.go b/codec/z_all_x_bench_gen_test.go
new file mode 100644
index 0000000..0ad4e79
--- /dev/null
+++ b/codec/z_all_x_bench_gen_test.go
@@ -0,0 +1,49 @@
+// +build alltests
+// +build x
+// +build go1.7
+// +build generated
+
+package codec
+
+// see notes in z_all_bench_test.go
+
+import "testing"
+
+func benchmarkCodecXGenGroup(t *testing.B) {
+ logT(nil, "\n-------------------------------\n")
+ t.Run("Benchmark__Msgpack____Encode", Benchmark__Msgpack____Encode)
+ t.Run("Benchmark__Binc_______Encode", Benchmark__Binc_______Encode)
+ t.Run("Benchmark__Simple_____Encode", Benchmark__Simple_____Encode)
+ t.Run("Benchmark__Cbor_______Encode", Benchmark__Cbor_______Encode)
+ t.Run("Benchmark__Json_______Encode", Benchmark__Json_______Encode)
+ t.Run("Benchmark__Std_Json___Encode", Benchmark__Std_Json___Encode)
+ t.Run("Benchmark__Gob________Encode", Benchmark__Gob________Encode)
+ t.Run("Benchmark__JsonIter___Encode", Benchmark__JsonIter___Encode)
+ t.Run("Benchmark__Bson_______Encode", Benchmark__Bson_______Encode)
+ t.Run("Benchmark__VMsgpack___Encode", Benchmark__VMsgpack___Encode)
+ t.Run("Benchmark__Msgp_______Encode", Benchmark__Msgp_______Encode)
+ t.Run("Benchmark__Easyjson___Encode", Benchmark__Easyjson___Encode)
+ t.Run("Benchmark__Ffjson_____Encode", Benchmark__Ffjson_____Encode)
+ t.Run("Benchmark__Gcbor______Encode", Benchmark__Gcbor______Encode)
+ t.Run("Benchmark__Xdr________Encode", Benchmark__Xdr________Encode)
+ t.Run("Benchmark__Sereal_____Encode", Benchmark__Sereal_____Encode)
+
+ t.Run("Benchmark__Msgpack____Decode", Benchmark__Msgpack____Decode)
+ t.Run("Benchmark__Binc_______Decode", Benchmark__Binc_______Decode)
+ t.Run("Benchmark__Simple_____Decode", Benchmark__Simple_____Decode)
+ t.Run("Benchmark__Cbor_______Decode", Benchmark__Cbor_______Decode)
+ t.Run("Benchmark__Json_______Decode", Benchmark__Json_______Decode)
+ t.Run("Benchmark__Std_Json___Decode", Benchmark__Std_Json___Decode)
+ t.Run("Benchmark__Gob________Decode", Benchmark__Gob________Decode)
+ t.Run("Benchmark__JsonIter___Decode", Benchmark__JsonIter___Decode)
+ t.Run("Benchmark__Bson_______Decode", Benchmark__Bson_______Decode)
+ t.Run("Benchmark__VMsgpack___Decode", Benchmark__VMsgpack___Decode)
+ t.Run("Benchmark__Msgp_______Decode", Benchmark__Msgp_______Decode)
+ t.Run("Benchmark__Easyjson___Decode", Benchmark__Easyjson___Decode)
+ t.Run("Benchmark__Ffjson_____Decode", Benchmark__Ffjson_____Decode)
+ t.Run("Benchmark__Gcbor______Decode", Benchmark__Gcbor______Decode)
+ t.Run("Benchmark__Xdr________Decode", Benchmark__Xdr________Decode)
+ t.Run("Benchmark__Sereal_____Decode", Benchmark__Sereal_____Decode)
+}
+
+func BenchmarkCodecXGenSuite(t *testing.B) { benchmarkSuite(t, benchmarkCodecXGenGroup) }