podman

Форк
0
/
fast-path.generated.go 
6157 строк · 154.3 Кб
1
//go:build !notfastpath && !codec.notfastpath
2
// +build !notfastpath,!codec.notfastpath
3

4
// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved.
5
// Use of this source code is governed by a MIT license found in the LICENSE file.
6

7
// Code generated from fast-path.go.tmpl - DO NOT EDIT.
8

9
package codec
10

11
// Fast path functions try to create a fast path encode or decode implementation
12
// for common maps and slices.
13
//
14
// We define the functions and register them in this single file
15
// so as not to pollute the encode.go and decode.go, and create a dependency in there.
16
// This file can be omitted without causing a build failure.
17
//
18
// The advantage of fast paths is:
19
//	  - Many calls bypass reflection altogether
20
//
21
// Currently support
22
//	  - slice of all builtin types (numeric, bool, string, []byte)
23
//    - maps of builtin types to builtin or interface{} type, EXCEPT FOR
24
//      keys of type uintptr, int8/16/32, uint16/32, float32/64, bool, interface{}
25
//      AND values of type type int8/16/32, uint16/32
26
// This should provide adequate "typical" implementations.
27
//
28
// Note that fast track decode functions must handle values for which an address cannot be obtained.
29
// For example:
30
//	 m2 := map[string]int{}
31
//	 p2 := []interface{}{m2}
32
//	 // decoding into p2 will bomb if fast track functions do not treat like unaddressable.
33
//
34

35
import (
36
	"reflect"
37
	"sort"
38
)
39

40
const fastpathEnabled = true
41

42
type fastpathT struct{}
43

44
var fastpathTV fastpathT
45

46
type fastpathE struct {
47
	rt    reflect.Type
48
	encfn func(*Encoder, *codecFnInfo, reflect.Value)
49
	decfn func(*Decoder, *codecFnInfo, reflect.Value)
50
}
51

52
type fastpathA [56]fastpathE
53
type fastpathARtid [56]uintptr
54

55
var fastpathAv fastpathA
56
var fastpathAvRtid fastpathARtid
57

58
type fastpathAslice struct{}
59

60
func (fastpathAslice) Len() int { return 56 }
61
func (fastpathAslice) Less(i, j int) bool {
62
	return fastpathAvRtid[uint(i)] < fastpathAvRtid[uint(j)]
63
}
64
func (fastpathAslice) Swap(i, j int) {
65
	fastpathAvRtid[uint(i)], fastpathAvRtid[uint(j)] = fastpathAvRtid[uint(j)], fastpathAvRtid[uint(i)]
66
	fastpathAv[uint(i)], fastpathAv[uint(j)] = fastpathAv[uint(j)], fastpathAv[uint(i)]
67
}
68

69
func fastpathAvIndex(rtid uintptr) int {
70
	// use binary search to grab the index (adapted from sort/search.go)
71
	// Note: we use goto (instead of for loop) so this can be inlined.
72
	// h, i, j := 0, 0, 56
73
	var h, i uint
74
	var j uint = 56
75
LOOP:
76
	if i < j {
77
		h = (i + j) >> 1 // avoid overflow when computing h // h = i + (j-i)/2
78
		if fastpathAvRtid[h] < rtid {
79
			i = h + 1
80
		} else {
81
			j = h
82
		}
83
		goto LOOP
84
	}
85
	if i < 56 && fastpathAvRtid[i] == rtid {
86
		return int(i)
87
	}
88
	return -1
89
}
90

91
// due to possible initialization loop error, make fastpath in an init()
92
func init() {
93
	var i uint = 0
94
	fn := func(v interface{},
95
		fe func(*Encoder, *codecFnInfo, reflect.Value),
96
		fd func(*Decoder, *codecFnInfo, reflect.Value)) {
97
		xrt := reflect.TypeOf(v)
98
		xptr := rt2id(xrt)
99
		fastpathAvRtid[i] = xptr
100
		fastpathAv[i] = fastpathE{xrt, fe, fd}
101
		i++
102
	}
103

104
	fn([]interface{}(nil), (*Encoder).fastpathEncSliceIntfR, (*Decoder).fastpathDecSliceIntfR)
105
	fn([]string(nil), (*Encoder).fastpathEncSliceStringR, (*Decoder).fastpathDecSliceStringR)
106
	fn([][]byte(nil), (*Encoder).fastpathEncSliceBytesR, (*Decoder).fastpathDecSliceBytesR)
107
	fn([]float32(nil), (*Encoder).fastpathEncSliceFloat32R, (*Decoder).fastpathDecSliceFloat32R)
108
	fn([]float64(nil), (*Encoder).fastpathEncSliceFloat64R, (*Decoder).fastpathDecSliceFloat64R)
109
	fn([]uint8(nil), (*Encoder).fastpathEncSliceUint8R, (*Decoder).fastpathDecSliceUint8R)
110
	fn([]uint64(nil), (*Encoder).fastpathEncSliceUint64R, (*Decoder).fastpathDecSliceUint64R)
111
	fn([]int(nil), (*Encoder).fastpathEncSliceIntR, (*Decoder).fastpathDecSliceIntR)
112
	fn([]int32(nil), (*Encoder).fastpathEncSliceInt32R, (*Decoder).fastpathDecSliceInt32R)
113
	fn([]int64(nil), (*Encoder).fastpathEncSliceInt64R, (*Decoder).fastpathDecSliceInt64R)
114
	fn([]bool(nil), (*Encoder).fastpathEncSliceBoolR, (*Decoder).fastpathDecSliceBoolR)
115

116
	fn(map[string]interface{}(nil), (*Encoder).fastpathEncMapStringIntfR, (*Decoder).fastpathDecMapStringIntfR)
117
	fn(map[string]string(nil), (*Encoder).fastpathEncMapStringStringR, (*Decoder).fastpathDecMapStringStringR)
118
	fn(map[string][]byte(nil), (*Encoder).fastpathEncMapStringBytesR, (*Decoder).fastpathDecMapStringBytesR)
119
	fn(map[string]uint8(nil), (*Encoder).fastpathEncMapStringUint8R, (*Decoder).fastpathDecMapStringUint8R)
120
	fn(map[string]uint64(nil), (*Encoder).fastpathEncMapStringUint64R, (*Decoder).fastpathDecMapStringUint64R)
121
	fn(map[string]int(nil), (*Encoder).fastpathEncMapStringIntR, (*Decoder).fastpathDecMapStringIntR)
122
	fn(map[string]int32(nil), (*Encoder).fastpathEncMapStringInt32R, (*Decoder).fastpathDecMapStringInt32R)
123
	fn(map[string]float64(nil), (*Encoder).fastpathEncMapStringFloat64R, (*Decoder).fastpathDecMapStringFloat64R)
124
	fn(map[string]bool(nil), (*Encoder).fastpathEncMapStringBoolR, (*Decoder).fastpathDecMapStringBoolR)
125
	fn(map[uint8]interface{}(nil), (*Encoder).fastpathEncMapUint8IntfR, (*Decoder).fastpathDecMapUint8IntfR)
126
	fn(map[uint8]string(nil), (*Encoder).fastpathEncMapUint8StringR, (*Decoder).fastpathDecMapUint8StringR)
127
	fn(map[uint8][]byte(nil), (*Encoder).fastpathEncMapUint8BytesR, (*Decoder).fastpathDecMapUint8BytesR)
128
	fn(map[uint8]uint8(nil), (*Encoder).fastpathEncMapUint8Uint8R, (*Decoder).fastpathDecMapUint8Uint8R)
129
	fn(map[uint8]uint64(nil), (*Encoder).fastpathEncMapUint8Uint64R, (*Decoder).fastpathDecMapUint8Uint64R)
130
	fn(map[uint8]int(nil), (*Encoder).fastpathEncMapUint8IntR, (*Decoder).fastpathDecMapUint8IntR)
131
	fn(map[uint8]int32(nil), (*Encoder).fastpathEncMapUint8Int32R, (*Decoder).fastpathDecMapUint8Int32R)
132
	fn(map[uint8]float64(nil), (*Encoder).fastpathEncMapUint8Float64R, (*Decoder).fastpathDecMapUint8Float64R)
133
	fn(map[uint8]bool(nil), (*Encoder).fastpathEncMapUint8BoolR, (*Decoder).fastpathDecMapUint8BoolR)
134
	fn(map[uint64]interface{}(nil), (*Encoder).fastpathEncMapUint64IntfR, (*Decoder).fastpathDecMapUint64IntfR)
135
	fn(map[uint64]string(nil), (*Encoder).fastpathEncMapUint64StringR, (*Decoder).fastpathDecMapUint64StringR)
136
	fn(map[uint64][]byte(nil), (*Encoder).fastpathEncMapUint64BytesR, (*Decoder).fastpathDecMapUint64BytesR)
137
	fn(map[uint64]uint8(nil), (*Encoder).fastpathEncMapUint64Uint8R, (*Decoder).fastpathDecMapUint64Uint8R)
138
	fn(map[uint64]uint64(nil), (*Encoder).fastpathEncMapUint64Uint64R, (*Decoder).fastpathDecMapUint64Uint64R)
139
	fn(map[uint64]int(nil), (*Encoder).fastpathEncMapUint64IntR, (*Decoder).fastpathDecMapUint64IntR)
140
	fn(map[uint64]int32(nil), (*Encoder).fastpathEncMapUint64Int32R, (*Decoder).fastpathDecMapUint64Int32R)
141
	fn(map[uint64]float64(nil), (*Encoder).fastpathEncMapUint64Float64R, (*Decoder).fastpathDecMapUint64Float64R)
142
	fn(map[uint64]bool(nil), (*Encoder).fastpathEncMapUint64BoolR, (*Decoder).fastpathDecMapUint64BoolR)
143
	fn(map[int]interface{}(nil), (*Encoder).fastpathEncMapIntIntfR, (*Decoder).fastpathDecMapIntIntfR)
144
	fn(map[int]string(nil), (*Encoder).fastpathEncMapIntStringR, (*Decoder).fastpathDecMapIntStringR)
145
	fn(map[int][]byte(nil), (*Encoder).fastpathEncMapIntBytesR, (*Decoder).fastpathDecMapIntBytesR)
146
	fn(map[int]uint8(nil), (*Encoder).fastpathEncMapIntUint8R, (*Decoder).fastpathDecMapIntUint8R)
147
	fn(map[int]uint64(nil), (*Encoder).fastpathEncMapIntUint64R, (*Decoder).fastpathDecMapIntUint64R)
148
	fn(map[int]int(nil), (*Encoder).fastpathEncMapIntIntR, (*Decoder).fastpathDecMapIntIntR)
149
	fn(map[int]int32(nil), (*Encoder).fastpathEncMapIntInt32R, (*Decoder).fastpathDecMapIntInt32R)
150
	fn(map[int]float64(nil), (*Encoder).fastpathEncMapIntFloat64R, (*Decoder).fastpathDecMapIntFloat64R)
151
	fn(map[int]bool(nil), (*Encoder).fastpathEncMapIntBoolR, (*Decoder).fastpathDecMapIntBoolR)
152
	fn(map[int32]interface{}(nil), (*Encoder).fastpathEncMapInt32IntfR, (*Decoder).fastpathDecMapInt32IntfR)
153
	fn(map[int32]string(nil), (*Encoder).fastpathEncMapInt32StringR, (*Decoder).fastpathDecMapInt32StringR)
154
	fn(map[int32][]byte(nil), (*Encoder).fastpathEncMapInt32BytesR, (*Decoder).fastpathDecMapInt32BytesR)
155
	fn(map[int32]uint8(nil), (*Encoder).fastpathEncMapInt32Uint8R, (*Decoder).fastpathDecMapInt32Uint8R)
156
	fn(map[int32]uint64(nil), (*Encoder).fastpathEncMapInt32Uint64R, (*Decoder).fastpathDecMapInt32Uint64R)
157
	fn(map[int32]int(nil), (*Encoder).fastpathEncMapInt32IntR, (*Decoder).fastpathDecMapInt32IntR)
158
	fn(map[int32]int32(nil), (*Encoder).fastpathEncMapInt32Int32R, (*Decoder).fastpathDecMapInt32Int32R)
159
	fn(map[int32]float64(nil), (*Encoder).fastpathEncMapInt32Float64R, (*Decoder).fastpathDecMapInt32Float64R)
160
	fn(map[int32]bool(nil), (*Encoder).fastpathEncMapInt32BoolR, (*Decoder).fastpathDecMapInt32BoolR)
161

162
	sort.Sort(fastpathAslice{})
163
}
164

165
// -- encode
166

167
// -- -- fast path type switch
168
func fastpathEncodeTypeSwitch(iv interface{}, e *Encoder) bool {
169
	switch v := iv.(type) {
170
	case []interface{}:
171
		fastpathTV.EncSliceIntfV(v, e)
172
	case *[]interface{}:
173
		if *v == nil {
174
			e.e.EncodeNil()
175
		} else {
176
			fastpathTV.EncSliceIntfV(*v, e)
177
		}
178
	case []string:
179
		fastpathTV.EncSliceStringV(v, e)
180
	case *[]string:
181
		if *v == nil {
182
			e.e.EncodeNil()
183
		} else {
184
			fastpathTV.EncSliceStringV(*v, e)
185
		}
186
	case [][]byte:
187
		fastpathTV.EncSliceBytesV(v, e)
188
	case *[][]byte:
189
		if *v == nil {
190
			e.e.EncodeNil()
191
		} else {
192
			fastpathTV.EncSliceBytesV(*v, e)
193
		}
194
	case []float32:
195
		fastpathTV.EncSliceFloat32V(v, e)
196
	case *[]float32:
197
		if *v == nil {
198
			e.e.EncodeNil()
199
		} else {
200
			fastpathTV.EncSliceFloat32V(*v, e)
201
		}
202
	case []float64:
203
		fastpathTV.EncSliceFloat64V(v, e)
204
	case *[]float64:
205
		if *v == nil {
206
			e.e.EncodeNil()
207
		} else {
208
			fastpathTV.EncSliceFloat64V(*v, e)
209
		}
210
	case []uint8:
211
		fastpathTV.EncSliceUint8V(v, e)
212
	case *[]uint8:
213
		if *v == nil {
214
			e.e.EncodeNil()
215
		} else {
216
			fastpathTV.EncSliceUint8V(*v, e)
217
		}
218
	case []uint64:
219
		fastpathTV.EncSliceUint64V(v, e)
220
	case *[]uint64:
221
		if *v == nil {
222
			e.e.EncodeNil()
223
		} else {
224
			fastpathTV.EncSliceUint64V(*v, e)
225
		}
226
	case []int:
227
		fastpathTV.EncSliceIntV(v, e)
228
	case *[]int:
229
		if *v == nil {
230
			e.e.EncodeNil()
231
		} else {
232
			fastpathTV.EncSliceIntV(*v, e)
233
		}
234
	case []int32:
235
		fastpathTV.EncSliceInt32V(v, e)
236
	case *[]int32:
237
		if *v == nil {
238
			e.e.EncodeNil()
239
		} else {
240
			fastpathTV.EncSliceInt32V(*v, e)
241
		}
242
	case []int64:
243
		fastpathTV.EncSliceInt64V(v, e)
244
	case *[]int64:
245
		if *v == nil {
246
			e.e.EncodeNil()
247
		} else {
248
			fastpathTV.EncSliceInt64V(*v, e)
249
		}
250
	case []bool:
251
		fastpathTV.EncSliceBoolV(v, e)
252
	case *[]bool:
253
		if *v == nil {
254
			e.e.EncodeNil()
255
		} else {
256
			fastpathTV.EncSliceBoolV(*v, e)
257
		}
258
	case map[string]interface{}:
259
		fastpathTV.EncMapStringIntfV(v, e)
260
	case *map[string]interface{}:
261
		if *v == nil {
262
			e.e.EncodeNil()
263
		} else {
264
			fastpathTV.EncMapStringIntfV(*v, e)
265
		}
266
	case map[string]string:
267
		fastpathTV.EncMapStringStringV(v, e)
268
	case *map[string]string:
269
		if *v == nil {
270
			e.e.EncodeNil()
271
		} else {
272
			fastpathTV.EncMapStringStringV(*v, e)
273
		}
274
	case map[string][]byte:
275
		fastpathTV.EncMapStringBytesV(v, e)
276
	case *map[string][]byte:
277
		if *v == nil {
278
			e.e.EncodeNil()
279
		} else {
280
			fastpathTV.EncMapStringBytesV(*v, e)
281
		}
282
	case map[string]uint8:
283
		fastpathTV.EncMapStringUint8V(v, e)
284
	case *map[string]uint8:
285
		if *v == nil {
286
			e.e.EncodeNil()
287
		} else {
288
			fastpathTV.EncMapStringUint8V(*v, e)
289
		}
290
	case map[string]uint64:
291
		fastpathTV.EncMapStringUint64V(v, e)
292
	case *map[string]uint64:
293
		if *v == nil {
294
			e.e.EncodeNil()
295
		} else {
296
			fastpathTV.EncMapStringUint64V(*v, e)
297
		}
298
	case map[string]int:
299
		fastpathTV.EncMapStringIntV(v, e)
300
	case *map[string]int:
301
		if *v == nil {
302
			e.e.EncodeNil()
303
		} else {
304
			fastpathTV.EncMapStringIntV(*v, e)
305
		}
306
	case map[string]int32:
307
		fastpathTV.EncMapStringInt32V(v, e)
308
	case *map[string]int32:
309
		if *v == nil {
310
			e.e.EncodeNil()
311
		} else {
312
			fastpathTV.EncMapStringInt32V(*v, e)
313
		}
314
	case map[string]float64:
315
		fastpathTV.EncMapStringFloat64V(v, e)
316
	case *map[string]float64:
317
		if *v == nil {
318
			e.e.EncodeNil()
319
		} else {
320
			fastpathTV.EncMapStringFloat64V(*v, e)
321
		}
322
	case map[string]bool:
323
		fastpathTV.EncMapStringBoolV(v, e)
324
	case *map[string]bool:
325
		if *v == nil {
326
			e.e.EncodeNil()
327
		} else {
328
			fastpathTV.EncMapStringBoolV(*v, e)
329
		}
330
	case map[uint8]interface{}:
331
		fastpathTV.EncMapUint8IntfV(v, e)
332
	case *map[uint8]interface{}:
333
		if *v == nil {
334
			e.e.EncodeNil()
335
		} else {
336
			fastpathTV.EncMapUint8IntfV(*v, e)
337
		}
338
	case map[uint8]string:
339
		fastpathTV.EncMapUint8StringV(v, e)
340
	case *map[uint8]string:
341
		if *v == nil {
342
			e.e.EncodeNil()
343
		} else {
344
			fastpathTV.EncMapUint8StringV(*v, e)
345
		}
346
	case map[uint8][]byte:
347
		fastpathTV.EncMapUint8BytesV(v, e)
348
	case *map[uint8][]byte:
349
		if *v == nil {
350
			e.e.EncodeNil()
351
		} else {
352
			fastpathTV.EncMapUint8BytesV(*v, e)
353
		}
354
	case map[uint8]uint8:
355
		fastpathTV.EncMapUint8Uint8V(v, e)
356
	case *map[uint8]uint8:
357
		if *v == nil {
358
			e.e.EncodeNil()
359
		} else {
360
			fastpathTV.EncMapUint8Uint8V(*v, e)
361
		}
362
	case map[uint8]uint64:
363
		fastpathTV.EncMapUint8Uint64V(v, e)
364
	case *map[uint8]uint64:
365
		if *v == nil {
366
			e.e.EncodeNil()
367
		} else {
368
			fastpathTV.EncMapUint8Uint64V(*v, e)
369
		}
370
	case map[uint8]int:
371
		fastpathTV.EncMapUint8IntV(v, e)
372
	case *map[uint8]int:
373
		if *v == nil {
374
			e.e.EncodeNil()
375
		} else {
376
			fastpathTV.EncMapUint8IntV(*v, e)
377
		}
378
	case map[uint8]int32:
379
		fastpathTV.EncMapUint8Int32V(v, e)
380
	case *map[uint8]int32:
381
		if *v == nil {
382
			e.e.EncodeNil()
383
		} else {
384
			fastpathTV.EncMapUint8Int32V(*v, e)
385
		}
386
	case map[uint8]float64:
387
		fastpathTV.EncMapUint8Float64V(v, e)
388
	case *map[uint8]float64:
389
		if *v == nil {
390
			e.e.EncodeNil()
391
		} else {
392
			fastpathTV.EncMapUint8Float64V(*v, e)
393
		}
394
	case map[uint8]bool:
395
		fastpathTV.EncMapUint8BoolV(v, e)
396
	case *map[uint8]bool:
397
		if *v == nil {
398
			e.e.EncodeNil()
399
		} else {
400
			fastpathTV.EncMapUint8BoolV(*v, e)
401
		}
402
	case map[uint64]interface{}:
403
		fastpathTV.EncMapUint64IntfV(v, e)
404
	case *map[uint64]interface{}:
405
		if *v == nil {
406
			e.e.EncodeNil()
407
		} else {
408
			fastpathTV.EncMapUint64IntfV(*v, e)
409
		}
410
	case map[uint64]string:
411
		fastpathTV.EncMapUint64StringV(v, e)
412
	case *map[uint64]string:
413
		if *v == nil {
414
			e.e.EncodeNil()
415
		} else {
416
			fastpathTV.EncMapUint64StringV(*v, e)
417
		}
418
	case map[uint64][]byte:
419
		fastpathTV.EncMapUint64BytesV(v, e)
420
	case *map[uint64][]byte:
421
		if *v == nil {
422
			e.e.EncodeNil()
423
		} else {
424
			fastpathTV.EncMapUint64BytesV(*v, e)
425
		}
426
	case map[uint64]uint8:
427
		fastpathTV.EncMapUint64Uint8V(v, e)
428
	case *map[uint64]uint8:
429
		if *v == nil {
430
			e.e.EncodeNil()
431
		} else {
432
			fastpathTV.EncMapUint64Uint8V(*v, e)
433
		}
434
	case map[uint64]uint64:
435
		fastpathTV.EncMapUint64Uint64V(v, e)
436
	case *map[uint64]uint64:
437
		if *v == nil {
438
			e.e.EncodeNil()
439
		} else {
440
			fastpathTV.EncMapUint64Uint64V(*v, e)
441
		}
442
	case map[uint64]int:
443
		fastpathTV.EncMapUint64IntV(v, e)
444
	case *map[uint64]int:
445
		if *v == nil {
446
			e.e.EncodeNil()
447
		} else {
448
			fastpathTV.EncMapUint64IntV(*v, e)
449
		}
450
	case map[uint64]int32:
451
		fastpathTV.EncMapUint64Int32V(v, e)
452
	case *map[uint64]int32:
453
		if *v == nil {
454
			e.e.EncodeNil()
455
		} else {
456
			fastpathTV.EncMapUint64Int32V(*v, e)
457
		}
458
	case map[uint64]float64:
459
		fastpathTV.EncMapUint64Float64V(v, e)
460
	case *map[uint64]float64:
461
		if *v == nil {
462
			e.e.EncodeNil()
463
		} else {
464
			fastpathTV.EncMapUint64Float64V(*v, e)
465
		}
466
	case map[uint64]bool:
467
		fastpathTV.EncMapUint64BoolV(v, e)
468
	case *map[uint64]bool:
469
		if *v == nil {
470
			e.e.EncodeNil()
471
		} else {
472
			fastpathTV.EncMapUint64BoolV(*v, e)
473
		}
474
	case map[int]interface{}:
475
		fastpathTV.EncMapIntIntfV(v, e)
476
	case *map[int]interface{}:
477
		if *v == nil {
478
			e.e.EncodeNil()
479
		} else {
480
			fastpathTV.EncMapIntIntfV(*v, e)
481
		}
482
	case map[int]string:
483
		fastpathTV.EncMapIntStringV(v, e)
484
	case *map[int]string:
485
		if *v == nil {
486
			e.e.EncodeNil()
487
		} else {
488
			fastpathTV.EncMapIntStringV(*v, e)
489
		}
490
	case map[int][]byte:
491
		fastpathTV.EncMapIntBytesV(v, e)
492
	case *map[int][]byte:
493
		if *v == nil {
494
			e.e.EncodeNil()
495
		} else {
496
			fastpathTV.EncMapIntBytesV(*v, e)
497
		}
498
	case map[int]uint8:
499
		fastpathTV.EncMapIntUint8V(v, e)
500
	case *map[int]uint8:
501
		if *v == nil {
502
			e.e.EncodeNil()
503
		} else {
504
			fastpathTV.EncMapIntUint8V(*v, e)
505
		}
506
	case map[int]uint64:
507
		fastpathTV.EncMapIntUint64V(v, e)
508
	case *map[int]uint64:
509
		if *v == nil {
510
			e.e.EncodeNil()
511
		} else {
512
			fastpathTV.EncMapIntUint64V(*v, e)
513
		}
514
	case map[int]int:
515
		fastpathTV.EncMapIntIntV(v, e)
516
	case *map[int]int:
517
		if *v == nil {
518
			e.e.EncodeNil()
519
		} else {
520
			fastpathTV.EncMapIntIntV(*v, e)
521
		}
522
	case map[int]int32:
523
		fastpathTV.EncMapIntInt32V(v, e)
524
	case *map[int]int32:
525
		if *v == nil {
526
			e.e.EncodeNil()
527
		} else {
528
			fastpathTV.EncMapIntInt32V(*v, e)
529
		}
530
	case map[int]float64:
531
		fastpathTV.EncMapIntFloat64V(v, e)
532
	case *map[int]float64:
533
		if *v == nil {
534
			e.e.EncodeNil()
535
		} else {
536
			fastpathTV.EncMapIntFloat64V(*v, e)
537
		}
538
	case map[int]bool:
539
		fastpathTV.EncMapIntBoolV(v, e)
540
	case *map[int]bool:
541
		if *v == nil {
542
			e.e.EncodeNil()
543
		} else {
544
			fastpathTV.EncMapIntBoolV(*v, e)
545
		}
546
	case map[int32]interface{}:
547
		fastpathTV.EncMapInt32IntfV(v, e)
548
	case *map[int32]interface{}:
549
		if *v == nil {
550
			e.e.EncodeNil()
551
		} else {
552
			fastpathTV.EncMapInt32IntfV(*v, e)
553
		}
554
	case map[int32]string:
555
		fastpathTV.EncMapInt32StringV(v, e)
556
	case *map[int32]string:
557
		if *v == nil {
558
			e.e.EncodeNil()
559
		} else {
560
			fastpathTV.EncMapInt32StringV(*v, e)
561
		}
562
	case map[int32][]byte:
563
		fastpathTV.EncMapInt32BytesV(v, e)
564
	case *map[int32][]byte:
565
		if *v == nil {
566
			e.e.EncodeNil()
567
		} else {
568
			fastpathTV.EncMapInt32BytesV(*v, e)
569
		}
570
	case map[int32]uint8:
571
		fastpathTV.EncMapInt32Uint8V(v, e)
572
	case *map[int32]uint8:
573
		if *v == nil {
574
			e.e.EncodeNil()
575
		} else {
576
			fastpathTV.EncMapInt32Uint8V(*v, e)
577
		}
578
	case map[int32]uint64:
579
		fastpathTV.EncMapInt32Uint64V(v, e)
580
	case *map[int32]uint64:
581
		if *v == nil {
582
			e.e.EncodeNil()
583
		} else {
584
			fastpathTV.EncMapInt32Uint64V(*v, e)
585
		}
586
	case map[int32]int:
587
		fastpathTV.EncMapInt32IntV(v, e)
588
	case *map[int32]int:
589
		if *v == nil {
590
			e.e.EncodeNil()
591
		} else {
592
			fastpathTV.EncMapInt32IntV(*v, e)
593
		}
594
	case map[int32]int32:
595
		fastpathTV.EncMapInt32Int32V(v, e)
596
	case *map[int32]int32:
597
		if *v == nil {
598
			e.e.EncodeNil()
599
		} else {
600
			fastpathTV.EncMapInt32Int32V(*v, e)
601
		}
602
	case map[int32]float64:
603
		fastpathTV.EncMapInt32Float64V(v, e)
604
	case *map[int32]float64:
605
		if *v == nil {
606
			e.e.EncodeNil()
607
		} else {
608
			fastpathTV.EncMapInt32Float64V(*v, e)
609
		}
610
	case map[int32]bool:
611
		fastpathTV.EncMapInt32BoolV(v, e)
612
	case *map[int32]bool:
613
		if *v == nil {
614
			e.e.EncodeNil()
615
		} else {
616
			fastpathTV.EncMapInt32BoolV(*v, e)
617
		}
618
	default:
619
		_ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4
620
		return false
621
	}
622
	return true
623
}
624

625
// -- -- fast path functions
626
func (e *Encoder) fastpathEncSliceIntfR(f *codecFnInfo, rv reflect.Value) {
627
	var v []interface{}
628
	if rv.Kind() == reflect.Array {
629
		rvGetSlice4Array(rv, &v)
630
	} else {
631
		v = rv2i(rv).([]interface{})
632
	}
633
	if f.ti.mbs {
634
		fastpathTV.EncAsMapSliceIntfV(v, e)
635
	} else {
636
		fastpathTV.EncSliceIntfV(v, e)
637
	}
638
}
639
func (fastpathT) EncSliceIntfV(v []interface{}, e *Encoder) {
640
	e.arrayStart(len(v))
641
	for j := range v {
642
		e.arrayElem()
643
		e.encode(v[j])
644
	}
645
	e.arrayEnd()
646
}
647
func (fastpathT) EncAsMapSliceIntfV(v []interface{}, e *Encoder) {
648
	e.haltOnMbsOddLen(len(v))
649
	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
650
	for j := range v {
651
		if j&1 == 0 { // if j%2 == 0 {
652
			e.mapElemKey()
653
		} else {
654
			e.mapElemValue()
655
		}
656
		e.encode(v[j])
657
	}
658
	e.mapEnd()
659
}
660
func (e *Encoder) fastpathEncSliceStringR(f *codecFnInfo, rv reflect.Value) {
661
	var v []string
662
	if rv.Kind() == reflect.Array {
663
		rvGetSlice4Array(rv, &v)
664
	} else {
665
		v = rv2i(rv).([]string)
666
	}
667
	if f.ti.mbs {
668
		fastpathTV.EncAsMapSliceStringV(v, e)
669
	} else {
670
		fastpathTV.EncSliceStringV(v, e)
671
	}
672
}
673
func (fastpathT) EncSliceStringV(v []string, e *Encoder) {
674
	e.arrayStart(len(v))
675
	for j := range v {
676
		e.arrayElem()
677
		e.e.EncodeString(v[j])
678
	}
679
	e.arrayEnd()
680
}
681
func (fastpathT) EncAsMapSliceStringV(v []string, e *Encoder) {
682
	e.haltOnMbsOddLen(len(v))
683
	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
684
	for j := range v {
685
		if j&1 == 0 { // if j%2 == 0 {
686
			e.mapElemKey()
687
		} else {
688
			e.mapElemValue()
689
		}
690
		e.e.EncodeString(v[j])
691
	}
692
	e.mapEnd()
693
}
694
func (e *Encoder) fastpathEncSliceBytesR(f *codecFnInfo, rv reflect.Value) {
695
	var v [][]byte
696
	if rv.Kind() == reflect.Array {
697
		rvGetSlice4Array(rv, &v)
698
	} else {
699
		v = rv2i(rv).([][]byte)
700
	}
701
	if f.ti.mbs {
702
		fastpathTV.EncAsMapSliceBytesV(v, e)
703
	} else {
704
		fastpathTV.EncSliceBytesV(v, e)
705
	}
706
}
707
func (fastpathT) EncSliceBytesV(v [][]byte, e *Encoder) {
708
	e.arrayStart(len(v))
709
	for j := range v {
710
		e.arrayElem()
711
		e.e.EncodeStringBytesRaw(v[j])
712
	}
713
	e.arrayEnd()
714
}
715
func (fastpathT) EncAsMapSliceBytesV(v [][]byte, e *Encoder) {
716
	e.haltOnMbsOddLen(len(v))
717
	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
718
	for j := range v {
719
		if j&1 == 0 { // if j%2 == 0 {
720
			e.mapElemKey()
721
		} else {
722
			e.mapElemValue()
723
		}
724
		e.e.EncodeStringBytesRaw(v[j])
725
	}
726
	e.mapEnd()
727
}
728
func (e *Encoder) fastpathEncSliceFloat32R(f *codecFnInfo, rv reflect.Value) {
729
	var v []float32
730
	if rv.Kind() == reflect.Array {
731
		rvGetSlice4Array(rv, &v)
732
	} else {
733
		v = rv2i(rv).([]float32)
734
	}
735
	if f.ti.mbs {
736
		fastpathTV.EncAsMapSliceFloat32V(v, e)
737
	} else {
738
		fastpathTV.EncSliceFloat32V(v, e)
739
	}
740
}
741
func (fastpathT) EncSliceFloat32V(v []float32, e *Encoder) {
742
	e.arrayStart(len(v))
743
	for j := range v {
744
		e.arrayElem()
745
		e.e.EncodeFloat32(v[j])
746
	}
747
	e.arrayEnd()
748
}
749
func (fastpathT) EncAsMapSliceFloat32V(v []float32, e *Encoder) {
750
	e.haltOnMbsOddLen(len(v))
751
	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
752
	for j := range v {
753
		if j&1 == 0 { // if j%2 == 0 {
754
			e.mapElemKey()
755
		} else {
756
			e.mapElemValue()
757
		}
758
		e.e.EncodeFloat32(v[j])
759
	}
760
	e.mapEnd()
761
}
762
func (e *Encoder) fastpathEncSliceFloat64R(f *codecFnInfo, rv reflect.Value) {
763
	var v []float64
764
	if rv.Kind() == reflect.Array {
765
		rvGetSlice4Array(rv, &v)
766
	} else {
767
		v = rv2i(rv).([]float64)
768
	}
769
	if f.ti.mbs {
770
		fastpathTV.EncAsMapSliceFloat64V(v, e)
771
	} else {
772
		fastpathTV.EncSliceFloat64V(v, e)
773
	}
774
}
775
func (fastpathT) EncSliceFloat64V(v []float64, e *Encoder) {
776
	e.arrayStart(len(v))
777
	for j := range v {
778
		e.arrayElem()
779
		e.e.EncodeFloat64(v[j])
780
	}
781
	e.arrayEnd()
782
}
783
func (fastpathT) EncAsMapSliceFloat64V(v []float64, e *Encoder) {
784
	e.haltOnMbsOddLen(len(v))
785
	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
786
	for j := range v {
787
		if j&1 == 0 { // if j%2 == 0 {
788
			e.mapElemKey()
789
		} else {
790
			e.mapElemValue()
791
		}
792
		e.e.EncodeFloat64(v[j])
793
	}
794
	e.mapEnd()
795
}
796
func (e *Encoder) fastpathEncSliceUint8R(f *codecFnInfo, rv reflect.Value) {
797
	var v []uint8
798
	if rv.Kind() == reflect.Array {
799
		rvGetSlice4Array(rv, &v)
800
	} else {
801
		v = rv2i(rv).([]uint8)
802
	}
803
	if f.ti.mbs {
804
		fastpathTV.EncAsMapSliceUint8V(v, e)
805
	} else {
806
		fastpathTV.EncSliceUint8V(v, e)
807
	}
808
}
809
func (fastpathT) EncSliceUint8V(v []uint8, e *Encoder) {
810
	e.e.EncodeStringBytesRaw(v)
811
}
812
func (fastpathT) EncAsMapSliceUint8V(v []uint8, e *Encoder) {
813
	e.haltOnMbsOddLen(len(v))
814
	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
815
	for j := range v {
816
		if j&1 == 0 { // if j%2 == 0 {
817
			e.mapElemKey()
818
		} else {
819
			e.mapElemValue()
820
		}
821
		e.e.EncodeUint(uint64(v[j]))
822
	}
823
	e.mapEnd()
824
}
825
func (e *Encoder) fastpathEncSliceUint64R(f *codecFnInfo, rv reflect.Value) {
826
	var v []uint64
827
	if rv.Kind() == reflect.Array {
828
		rvGetSlice4Array(rv, &v)
829
	} else {
830
		v = rv2i(rv).([]uint64)
831
	}
832
	if f.ti.mbs {
833
		fastpathTV.EncAsMapSliceUint64V(v, e)
834
	} else {
835
		fastpathTV.EncSliceUint64V(v, e)
836
	}
837
}
838
func (fastpathT) EncSliceUint64V(v []uint64, e *Encoder) {
839
	e.arrayStart(len(v))
840
	for j := range v {
841
		e.arrayElem()
842
		e.e.EncodeUint(v[j])
843
	}
844
	e.arrayEnd()
845
}
846
func (fastpathT) EncAsMapSliceUint64V(v []uint64, e *Encoder) {
847
	e.haltOnMbsOddLen(len(v))
848
	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
849
	for j := range v {
850
		if j&1 == 0 { // if j%2 == 0 {
851
			e.mapElemKey()
852
		} else {
853
			e.mapElemValue()
854
		}
855
		e.e.EncodeUint(v[j])
856
	}
857
	e.mapEnd()
858
}
859
func (e *Encoder) fastpathEncSliceIntR(f *codecFnInfo, rv reflect.Value) {
860
	var v []int
861
	if rv.Kind() == reflect.Array {
862
		rvGetSlice4Array(rv, &v)
863
	} else {
864
		v = rv2i(rv).([]int)
865
	}
866
	if f.ti.mbs {
867
		fastpathTV.EncAsMapSliceIntV(v, e)
868
	} else {
869
		fastpathTV.EncSliceIntV(v, e)
870
	}
871
}
872
func (fastpathT) EncSliceIntV(v []int, e *Encoder) {
873
	e.arrayStart(len(v))
874
	for j := range v {
875
		e.arrayElem()
876
		e.e.EncodeInt(int64(v[j]))
877
	}
878
	e.arrayEnd()
879
}
880
func (fastpathT) EncAsMapSliceIntV(v []int, e *Encoder) {
881
	e.haltOnMbsOddLen(len(v))
882
	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
883
	for j := range v {
884
		if j&1 == 0 { // if j%2 == 0 {
885
			e.mapElemKey()
886
		} else {
887
			e.mapElemValue()
888
		}
889
		e.e.EncodeInt(int64(v[j]))
890
	}
891
	e.mapEnd()
892
}
893
func (e *Encoder) fastpathEncSliceInt32R(f *codecFnInfo, rv reflect.Value) {
894
	var v []int32
895
	if rv.Kind() == reflect.Array {
896
		rvGetSlice4Array(rv, &v)
897
	} else {
898
		v = rv2i(rv).([]int32)
899
	}
900
	if f.ti.mbs {
901
		fastpathTV.EncAsMapSliceInt32V(v, e)
902
	} else {
903
		fastpathTV.EncSliceInt32V(v, e)
904
	}
905
}
906
func (fastpathT) EncSliceInt32V(v []int32, e *Encoder) {
907
	e.arrayStart(len(v))
908
	for j := range v {
909
		e.arrayElem()
910
		e.e.EncodeInt(int64(v[j]))
911
	}
912
	e.arrayEnd()
913
}
914
func (fastpathT) EncAsMapSliceInt32V(v []int32, e *Encoder) {
915
	e.haltOnMbsOddLen(len(v))
916
	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
917
	for j := range v {
918
		if j&1 == 0 { // if j%2 == 0 {
919
			e.mapElemKey()
920
		} else {
921
			e.mapElemValue()
922
		}
923
		e.e.EncodeInt(int64(v[j]))
924
	}
925
	e.mapEnd()
926
}
927
func (e *Encoder) fastpathEncSliceInt64R(f *codecFnInfo, rv reflect.Value) {
928
	var v []int64
929
	if rv.Kind() == reflect.Array {
930
		rvGetSlice4Array(rv, &v)
931
	} else {
932
		v = rv2i(rv).([]int64)
933
	}
934
	if f.ti.mbs {
935
		fastpathTV.EncAsMapSliceInt64V(v, e)
936
	} else {
937
		fastpathTV.EncSliceInt64V(v, e)
938
	}
939
}
940
func (fastpathT) EncSliceInt64V(v []int64, e *Encoder) {
941
	e.arrayStart(len(v))
942
	for j := range v {
943
		e.arrayElem()
944
		e.e.EncodeInt(v[j])
945
	}
946
	e.arrayEnd()
947
}
948
func (fastpathT) EncAsMapSliceInt64V(v []int64, e *Encoder) {
949
	e.haltOnMbsOddLen(len(v))
950
	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
951
	for j := range v {
952
		if j&1 == 0 { // if j%2 == 0 {
953
			e.mapElemKey()
954
		} else {
955
			e.mapElemValue()
956
		}
957
		e.e.EncodeInt(v[j])
958
	}
959
	e.mapEnd()
960
}
961
func (e *Encoder) fastpathEncSliceBoolR(f *codecFnInfo, rv reflect.Value) {
962
	var v []bool
963
	if rv.Kind() == reflect.Array {
964
		rvGetSlice4Array(rv, &v)
965
	} else {
966
		v = rv2i(rv).([]bool)
967
	}
968
	if f.ti.mbs {
969
		fastpathTV.EncAsMapSliceBoolV(v, e)
970
	} else {
971
		fastpathTV.EncSliceBoolV(v, e)
972
	}
973
}
974
func (fastpathT) EncSliceBoolV(v []bool, e *Encoder) {
975
	e.arrayStart(len(v))
976
	for j := range v {
977
		e.arrayElem()
978
		e.e.EncodeBool(v[j])
979
	}
980
	e.arrayEnd()
981
}
982
func (fastpathT) EncAsMapSliceBoolV(v []bool, e *Encoder) {
983
	e.haltOnMbsOddLen(len(v))
984
	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
985
	for j := range v {
986
		if j&1 == 0 { // if j%2 == 0 {
987
			e.mapElemKey()
988
		} else {
989
			e.mapElemValue()
990
		}
991
		e.e.EncodeBool(v[j])
992
	}
993
	e.mapEnd()
994
}
995
func (e *Encoder) fastpathEncMapStringIntfR(f *codecFnInfo, rv reflect.Value) {
996
	fastpathTV.EncMapStringIntfV(rv2i(rv).(map[string]interface{}), e)
997
}
998
func (fastpathT) EncMapStringIntfV(v map[string]interface{}, e *Encoder) {
999
	e.mapStart(len(v))
1000
	if e.h.Canonical {
1001
		v2 := make([]string, len(v))
1002
		var i uint
1003
		for k := range v {
1004
			v2[i] = k
1005
			i++
1006
		}
1007
		sort.Sort(stringSlice(v2))
1008
		for _, k2 := range v2 {
1009
			e.mapElemKey()
1010
			e.e.EncodeString(k2)
1011
			e.mapElemValue()
1012
			e.encode(v[k2])
1013
		}
1014
	} else {
1015
		for k2, v2 := range v {
1016
			e.mapElemKey()
1017
			e.e.EncodeString(k2)
1018
			e.mapElemValue()
1019
			e.encode(v2)
1020
		}
1021
	}
1022
	e.mapEnd()
1023
}
1024
func (e *Encoder) fastpathEncMapStringStringR(f *codecFnInfo, rv reflect.Value) {
1025
	fastpathTV.EncMapStringStringV(rv2i(rv).(map[string]string), e)
1026
}
1027
func (fastpathT) EncMapStringStringV(v map[string]string, e *Encoder) {
1028
	e.mapStart(len(v))
1029
	if e.h.Canonical {
1030
		v2 := make([]string, len(v))
1031
		var i uint
1032
		for k := range v {
1033
			v2[i] = k
1034
			i++
1035
		}
1036
		sort.Sort(stringSlice(v2))
1037
		for _, k2 := range v2 {
1038
			e.mapElemKey()
1039
			e.e.EncodeString(k2)
1040
			e.mapElemValue()
1041
			e.e.EncodeString(v[k2])
1042
		}
1043
	} else {
1044
		for k2, v2 := range v {
1045
			e.mapElemKey()
1046
			e.e.EncodeString(k2)
1047
			e.mapElemValue()
1048
			e.e.EncodeString(v2)
1049
		}
1050
	}
1051
	e.mapEnd()
1052
}
1053
func (e *Encoder) fastpathEncMapStringBytesR(f *codecFnInfo, rv reflect.Value) {
1054
	fastpathTV.EncMapStringBytesV(rv2i(rv).(map[string][]byte), e)
1055
}
1056
func (fastpathT) EncMapStringBytesV(v map[string][]byte, e *Encoder) {
1057
	e.mapStart(len(v))
1058
	if e.h.Canonical {
1059
		v2 := make([]string, len(v))
1060
		var i uint
1061
		for k := range v {
1062
			v2[i] = k
1063
			i++
1064
		}
1065
		sort.Sort(stringSlice(v2))
1066
		for _, k2 := range v2 {
1067
			e.mapElemKey()
1068
			e.e.EncodeString(k2)
1069
			e.mapElemValue()
1070
			e.e.EncodeStringBytesRaw(v[k2])
1071
		}
1072
	} else {
1073
		for k2, v2 := range v {
1074
			e.mapElemKey()
1075
			e.e.EncodeString(k2)
1076
			e.mapElemValue()
1077
			e.e.EncodeStringBytesRaw(v2)
1078
		}
1079
	}
1080
	e.mapEnd()
1081
}
1082
func (e *Encoder) fastpathEncMapStringUint8R(f *codecFnInfo, rv reflect.Value) {
1083
	fastpathTV.EncMapStringUint8V(rv2i(rv).(map[string]uint8), e)
1084
}
1085
func (fastpathT) EncMapStringUint8V(v map[string]uint8, e *Encoder) {
1086
	e.mapStart(len(v))
1087
	if e.h.Canonical {
1088
		v2 := make([]string, len(v))
1089
		var i uint
1090
		for k := range v {
1091
			v2[i] = k
1092
			i++
1093
		}
1094
		sort.Sort(stringSlice(v2))
1095
		for _, k2 := range v2 {
1096
			e.mapElemKey()
1097
			e.e.EncodeString(k2)
1098
			e.mapElemValue()
1099
			e.e.EncodeUint(uint64(v[k2]))
1100
		}
1101
	} else {
1102
		for k2, v2 := range v {
1103
			e.mapElemKey()
1104
			e.e.EncodeString(k2)
1105
			e.mapElemValue()
1106
			e.e.EncodeUint(uint64(v2))
1107
		}
1108
	}
1109
	e.mapEnd()
1110
}
1111
func (e *Encoder) fastpathEncMapStringUint64R(f *codecFnInfo, rv reflect.Value) {
1112
	fastpathTV.EncMapStringUint64V(rv2i(rv).(map[string]uint64), e)
1113
}
1114
func (fastpathT) EncMapStringUint64V(v map[string]uint64, e *Encoder) {
1115
	e.mapStart(len(v))
1116
	if e.h.Canonical {
1117
		v2 := make([]string, len(v))
1118
		var i uint
1119
		for k := range v {
1120
			v2[i] = k
1121
			i++
1122
		}
1123
		sort.Sort(stringSlice(v2))
1124
		for _, k2 := range v2 {
1125
			e.mapElemKey()
1126
			e.e.EncodeString(k2)
1127
			e.mapElemValue()
1128
			e.e.EncodeUint(v[k2])
1129
		}
1130
	} else {
1131
		for k2, v2 := range v {
1132
			e.mapElemKey()
1133
			e.e.EncodeString(k2)
1134
			e.mapElemValue()
1135
			e.e.EncodeUint(v2)
1136
		}
1137
	}
1138
	e.mapEnd()
1139
}
1140
func (e *Encoder) fastpathEncMapStringIntR(f *codecFnInfo, rv reflect.Value) {
1141
	fastpathTV.EncMapStringIntV(rv2i(rv).(map[string]int), e)
1142
}
1143
func (fastpathT) EncMapStringIntV(v map[string]int, e *Encoder) {
1144
	e.mapStart(len(v))
1145
	if e.h.Canonical {
1146
		v2 := make([]string, len(v))
1147
		var i uint
1148
		for k := range v {
1149
			v2[i] = k
1150
			i++
1151
		}
1152
		sort.Sort(stringSlice(v2))
1153
		for _, k2 := range v2 {
1154
			e.mapElemKey()
1155
			e.e.EncodeString(k2)
1156
			e.mapElemValue()
1157
			e.e.EncodeInt(int64(v[k2]))
1158
		}
1159
	} else {
1160
		for k2, v2 := range v {
1161
			e.mapElemKey()
1162
			e.e.EncodeString(k2)
1163
			e.mapElemValue()
1164
			e.e.EncodeInt(int64(v2))
1165
		}
1166
	}
1167
	e.mapEnd()
1168
}
1169
func (e *Encoder) fastpathEncMapStringInt32R(f *codecFnInfo, rv reflect.Value) {
1170
	fastpathTV.EncMapStringInt32V(rv2i(rv).(map[string]int32), e)
1171
}
1172
func (fastpathT) EncMapStringInt32V(v map[string]int32, e *Encoder) {
1173
	e.mapStart(len(v))
1174
	if e.h.Canonical {
1175
		v2 := make([]string, len(v))
1176
		var i uint
1177
		for k := range v {
1178
			v2[i] = k
1179
			i++
1180
		}
1181
		sort.Sort(stringSlice(v2))
1182
		for _, k2 := range v2 {
1183
			e.mapElemKey()
1184
			e.e.EncodeString(k2)
1185
			e.mapElemValue()
1186
			e.e.EncodeInt(int64(v[k2]))
1187
		}
1188
	} else {
1189
		for k2, v2 := range v {
1190
			e.mapElemKey()
1191
			e.e.EncodeString(k2)
1192
			e.mapElemValue()
1193
			e.e.EncodeInt(int64(v2))
1194
		}
1195
	}
1196
	e.mapEnd()
1197
}
1198
func (e *Encoder) fastpathEncMapStringFloat64R(f *codecFnInfo, rv reflect.Value) {
1199
	fastpathTV.EncMapStringFloat64V(rv2i(rv).(map[string]float64), e)
1200
}
1201
func (fastpathT) EncMapStringFloat64V(v map[string]float64, e *Encoder) {
1202
	e.mapStart(len(v))
1203
	if e.h.Canonical {
1204
		v2 := make([]string, len(v))
1205
		var i uint
1206
		for k := range v {
1207
			v2[i] = k
1208
			i++
1209
		}
1210
		sort.Sort(stringSlice(v2))
1211
		for _, k2 := range v2 {
1212
			e.mapElemKey()
1213
			e.e.EncodeString(k2)
1214
			e.mapElemValue()
1215
			e.e.EncodeFloat64(v[k2])
1216
		}
1217
	} else {
1218
		for k2, v2 := range v {
1219
			e.mapElemKey()
1220
			e.e.EncodeString(k2)
1221
			e.mapElemValue()
1222
			e.e.EncodeFloat64(v2)
1223
		}
1224
	}
1225
	e.mapEnd()
1226
}
1227
func (e *Encoder) fastpathEncMapStringBoolR(f *codecFnInfo, rv reflect.Value) {
1228
	fastpathTV.EncMapStringBoolV(rv2i(rv).(map[string]bool), e)
1229
}
1230
func (fastpathT) EncMapStringBoolV(v map[string]bool, e *Encoder) {
1231
	e.mapStart(len(v))
1232
	if e.h.Canonical {
1233
		v2 := make([]string, len(v))
1234
		var i uint
1235
		for k := range v {
1236
			v2[i] = k
1237
			i++
1238
		}
1239
		sort.Sort(stringSlice(v2))
1240
		for _, k2 := range v2 {
1241
			e.mapElemKey()
1242
			e.e.EncodeString(k2)
1243
			e.mapElemValue()
1244
			e.e.EncodeBool(v[k2])
1245
		}
1246
	} else {
1247
		for k2, v2 := range v {
1248
			e.mapElemKey()
1249
			e.e.EncodeString(k2)
1250
			e.mapElemValue()
1251
			e.e.EncodeBool(v2)
1252
		}
1253
	}
1254
	e.mapEnd()
1255
}
1256
func (e *Encoder) fastpathEncMapUint8IntfR(f *codecFnInfo, rv reflect.Value) {
1257
	fastpathTV.EncMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), e)
1258
}
1259
func (fastpathT) EncMapUint8IntfV(v map[uint8]interface{}, e *Encoder) {
1260
	e.mapStart(len(v))
1261
	if e.h.Canonical {
1262
		v2 := make([]uint8, len(v))
1263
		var i uint
1264
		for k := range v {
1265
			v2[i] = k
1266
			i++
1267
		}
1268
		sort.Sort(uint8Slice(v2))
1269
		for _, k2 := range v2 {
1270
			e.mapElemKey()
1271
			e.e.EncodeUint(uint64(k2))
1272
			e.mapElemValue()
1273
			e.encode(v[k2])
1274
		}
1275
	} else {
1276
		for k2, v2 := range v {
1277
			e.mapElemKey()
1278
			e.e.EncodeUint(uint64(k2))
1279
			e.mapElemValue()
1280
			e.encode(v2)
1281
		}
1282
	}
1283
	e.mapEnd()
1284
}
1285
func (e *Encoder) fastpathEncMapUint8StringR(f *codecFnInfo, rv reflect.Value) {
1286
	fastpathTV.EncMapUint8StringV(rv2i(rv).(map[uint8]string), e)
1287
}
1288
func (fastpathT) EncMapUint8StringV(v map[uint8]string, e *Encoder) {
1289
	e.mapStart(len(v))
1290
	if e.h.Canonical {
1291
		v2 := make([]uint8, len(v))
1292
		var i uint
1293
		for k := range v {
1294
			v2[i] = k
1295
			i++
1296
		}
1297
		sort.Sort(uint8Slice(v2))
1298
		for _, k2 := range v2 {
1299
			e.mapElemKey()
1300
			e.e.EncodeUint(uint64(k2))
1301
			e.mapElemValue()
1302
			e.e.EncodeString(v[k2])
1303
		}
1304
	} else {
1305
		for k2, v2 := range v {
1306
			e.mapElemKey()
1307
			e.e.EncodeUint(uint64(k2))
1308
			e.mapElemValue()
1309
			e.e.EncodeString(v2)
1310
		}
1311
	}
1312
	e.mapEnd()
1313
}
1314
func (e *Encoder) fastpathEncMapUint8BytesR(f *codecFnInfo, rv reflect.Value) {
1315
	fastpathTV.EncMapUint8BytesV(rv2i(rv).(map[uint8][]byte), e)
1316
}
1317
func (fastpathT) EncMapUint8BytesV(v map[uint8][]byte, e *Encoder) {
1318
	e.mapStart(len(v))
1319
	if e.h.Canonical {
1320
		v2 := make([]uint8, len(v))
1321
		var i uint
1322
		for k := range v {
1323
			v2[i] = k
1324
			i++
1325
		}
1326
		sort.Sort(uint8Slice(v2))
1327
		for _, k2 := range v2 {
1328
			e.mapElemKey()
1329
			e.e.EncodeUint(uint64(k2))
1330
			e.mapElemValue()
1331
			e.e.EncodeStringBytesRaw(v[k2])
1332
		}
1333
	} else {
1334
		for k2, v2 := range v {
1335
			e.mapElemKey()
1336
			e.e.EncodeUint(uint64(k2))
1337
			e.mapElemValue()
1338
			e.e.EncodeStringBytesRaw(v2)
1339
		}
1340
	}
1341
	e.mapEnd()
1342
}
1343
func (e *Encoder) fastpathEncMapUint8Uint8R(f *codecFnInfo, rv reflect.Value) {
1344
	fastpathTV.EncMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), e)
1345
}
1346
func (fastpathT) EncMapUint8Uint8V(v map[uint8]uint8, e *Encoder) {
1347
	e.mapStart(len(v))
1348
	if e.h.Canonical {
1349
		v2 := make([]uint8, len(v))
1350
		var i uint
1351
		for k := range v {
1352
			v2[i] = k
1353
			i++
1354
		}
1355
		sort.Sort(uint8Slice(v2))
1356
		for _, k2 := range v2 {
1357
			e.mapElemKey()
1358
			e.e.EncodeUint(uint64(k2))
1359
			e.mapElemValue()
1360
			e.e.EncodeUint(uint64(v[k2]))
1361
		}
1362
	} else {
1363
		for k2, v2 := range v {
1364
			e.mapElemKey()
1365
			e.e.EncodeUint(uint64(k2))
1366
			e.mapElemValue()
1367
			e.e.EncodeUint(uint64(v2))
1368
		}
1369
	}
1370
	e.mapEnd()
1371
}
1372
func (e *Encoder) fastpathEncMapUint8Uint64R(f *codecFnInfo, rv reflect.Value) {
1373
	fastpathTV.EncMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), e)
1374
}
1375
func (fastpathT) EncMapUint8Uint64V(v map[uint8]uint64, e *Encoder) {
1376
	e.mapStart(len(v))
1377
	if e.h.Canonical {
1378
		v2 := make([]uint8, len(v))
1379
		var i uint
1380
		for k := range v {
1381
			v2[i] = k
1382
			i++
1383
		}
1384
		sort.Sort(uint8Slice(v2))
1385
		for _, k2 := range v2 {
1386
			e.mapElemKey()
1387
			e.e.EncodeUint(uint64(k2))
1388
			e.mapElemValue()
1389
			e.e.EncodeUint(v[k2])
1390
		}
1391
	} else {
1392
		for k2, v2 := range v {
1393
			e.mapElemKey()
1394
			e.e.EncodeUint(uint64(k2))
1395
			e.mapElemValue()
1396
			e.e.EncodeUint(v2)
1397
		}
1398
	}
1399
	e.mapEnd()
1400
}
1401
func (e *Encoder) fastpathEncMapUint8IntR(f *codecFnInfo, rv reflect.Value) {
1402
	fastpathTV.EncMapUint8IntV(rv2i(rv).(map[uint8]int), e)
1403
}
1404
func (fastpathT) EncMapUint8IntV(v map[uint8]int, e *Encoder) {
1405
	e.mapStart(len(v))
1406
	if e.h.Canonical {
1407
		v2 := make([]uint8, len(v))
1408
		var i uint
1409
		for k := range v {
1410
			v2[i] = k
1411
			i++
1412
		}
1413
		sort.Sort(uint8Slice(v2))
1414
		for _, k2 := range v2 {
1415
			e.mapElemKey()
1416
			e.e.EncodeUint(uint64(k2))
1417
			e.mapElemValue()
1418
			e.e.EncodeInt(int64(v[k2]))
1419
		}
1420
	} else {
1421
		for k2, v2 := range v {
1422
			e.mapElemKey()
1423
			e.e.EncodeUint(uint64(k2))
1424
			e.mapElemValue()
1425
			e.e.EncodeInt(int64(v2))
1426
		}
1427
	}
1428
	e.mapEnd()
1429
}
1430
func (e *Encoder) fastpathEncMapUint8Int32R(f *codecFnInfo, rv reflect.Value) {
1431
	fastpathTV.EncMapUint8Int32V(rv2i(rv).(map[uint8]int32), e)
1432
}
1433
func (fastpathT) EncMapUint8Int32V(v map[uint8]int32, e *Encoder) {
1434
	e.mapStart(len(v))
1435
	if e.h.Canonical {
1436
		v2 := make([]uint8, len(v))
1437
		var i uint
1438
		for k := range v {
1439
			v2[i] = k
1440
			i++
1441
		}
1442
		sort.Sort(uint8Slice(v2))
1443
		for _, k2 := range v2 {
1444
			e.mapElemKey()
1445
			e.e.EncodeUint(uint64(k2))
1446
			e.mapElemValue()
1447
			e.e.EncodeInt(int64(v[k2]))
1448
		}
1449
	} else {
1450
		for k2, v2 := range v {
1451
			e.mapElemKey()
1452
			e.e.EncodeUint(uint64(k2))
1453
			e.mapElemValue()
1454
			e.e.EncodeInt(int64(v2))
1455
		}
1456
	}
1457
	e.mapEnd()
1458
}
1459
func (e *Encoder) fastpathEncMapUint8Float64R(f *codecFnInfo, rv reflect.Value) {
1460
	fastpathTV.EncMapUint8Float64V(rv2i(rv).(map[uint8]float64), e)
1461
}
1462
func (fastpathT) EncMapUint8Float64V(v map[uint8]float64, e *Encoder) {
1463
	e.mapStart(len(v))
1464
	if e.h.Canonical {
1465
		v2 := make([]uint8, len(v))
1466
		var i uint
1467
		for k := range v {
1468
			v2[i] = k
1469
			i++
1470
		}
1471
		sort.Sort(uint8Slice(v2))
1472
		for _, k2 := range v2 {
1473
			e.mapElemKey()
1474
			e.e.EncodeUint(uint64(k2))
1475
			e.mapElemValue()
1476
			e.e.EncodeFloat64(v[k2])
1477
		}
1478
	} else {
1479
		for k2, v2 := range v {
1480
			e.mapElemKey()
1481
			e.e.EncodeUint(uint64(k2))
1482
			e.mapElemValue()
1483
			e.e.EncodeFloat64(v2)
1484
		}
1485
	}
1486
	e.mapEnd()
1487
}
1488
func (e *Encoder) fastpathEncMapUint8BoolR(f *codecFnInfo, rv reflect.Value) {
1489
	fastpathTV.EncMapUint8BoolV(rv2i(rv).(map[uint8]bool), e)
1490
}
1491
func (fastpathT) EncMapUint8BoolV(v map[uint8]bool, e *Encoder) {
1492
	e.mapStart(len(v))
1493
	if e.h.Canonical {
1494
		v2 := make([]uint8, len(v))
1495
		var i uint
1496
		for k := range v {
1497
			v2[i] = k
1498
			i++
1499
		}
1500
		sort.Sort(uint8Slice(v2))
1501
		for _, k2 := range v2 {
1502
			e.mapElemKey()
1503
			e.e.EncodeUint(uint64(k2))
1504
			e.mapElemValue()
1505
			e.e.EncodeBool(v[k2])
1506
		}
1507
	} else {
1508
		for k2, v2 := range v {
1509
			e.mapElemKey()
1510
			e.e.EncodeUint(uint64(k2))
1511
			e.mapElemValue()
1512
			e.e.EncodeBool(v2)
1513
		}
1514
	}
1515
	e.mapEnd()
1516
}
1517
func (e *Encoder) fastpathEncMapUint64IntfR(f *codecFnInfo, rv reflect.Value) {
1518
	fastpathTV.EncMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), e)
1519
}
1520
func (fastpathT) EncMapUint64IntfV(v map[uint64]interface{}, e *Encoder) {
1521
	e.mapStart(len(v))
1522
	if e.h.Canonical {
1523
		v2 := make([]uint64, len(v))
1524
		var i uint
1525
		for k := range v {
1526
			v2[i] = k
1527
			i++
1528
		}
1529
		sort.Sort(uint64Slice(v2))
1530
		for _, k2 := range v2 {
1531
			e.mapElemKey()
1532
			e.e.EncodeUint(k2)
1533
			e.mapElemValue()
1534
			e.encode(v[k2])
1535
		}
1536
	} else {
1537
		for k2, v2 := range v {
1538
			e.mapElemKey()
1539
			e.e.EncodeUint(k2)
1540
			e.mapElemValue()
1541
			e.encode(v2)
1542
		}
1543
	}
1544
	e.mapEnd()
1545
}
1546
func (e *Encoder) fastpathEncMapUint64StringR(f *codecFnInfo, rv reflect.Value) {
1547
	fastpathTV.EncMapUint64StringV(rv2i(rv).(map[uint64]string), e)
1548
}
1549
func (fastpathT) EncMapUint64StringV(v map[uint64]string, e *Encoder) {
1550
	e.mapStart(len(v))
1551
	if e.h.Canonical {
1552
		v2 := make([]uint64, len(v))
1553
		var i uint
1554
		for k := range v {
1555
			v2[i] = k
1556
			i++
1557
		}
1558
		sort.Sort(uint64Slice(v2))
1559
		for _, k2 := range v2 {
1560
			e.mapElemKey()
1561
			e.e.EncodeUint(k2)
1562
			e.mapElemValue()
1563
			e.e.EncodeString(v[k2])
1564
		}
1565
	} else {
1566
		for k2, v2 := range v {
1567
			e.mapElemKey()
1568
			e.e.EncodeUint(k2)
1569
			e.mapElemValue()
1570
			e.e.EncodeString(v2)
1571
		}
1572
	}
1573
	e.mapEnd()
1574
}
1575
func (e *Encoder) fastpathEncMapUint64BytesR(f *codecFnInfo, rv reflect.Value) {
1576
	fastpathTV.EncMapUint64BytesV(rv2i(rv).(map[uint64][]byte), e)
1577
}
1578
func (fastpathT) EncMapUint64BytesV(v map[uint64][]byte, e *Encoder) {
1579
	e.mapStart(len(v))
1580
	if e.h.Canonical {
1581
		v2 := make([]uint64, len(v))
1582
		var i uint
1583
		for k := range v {
1584
			v2[i] = k
1585
			i++
1586
		}
1587
		sort.Sort(uint64Slice(v2))
1588
		for _, k2 := range v2 {
1589
			e.mapElemKey()
1590
			e.e.EncodeUint(k2)
1591
			e.mapElemValue()
1592
			e.e.EncodeStringBytesRaw(v[k2])
1593
		}
1594
	} else {
1595
		for k2, v2 := range v {
1596
			e.mapElemKey()
1597
			e.e.EncodeUint(k2)
1598
			e.mapElemValue()
1599
			e.e.EncodeStringBytesRaw(v2)
1600
		}
1601
	}
1602
	e.mapEnd()
1603
}
1604
func (e *Encoder) fastpathEncMapUint64Uint8R(f *codecFnInfo, rv reflect.Value) {
1605
	fastpathTV.EncMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), e)
1606
}
1607
func (fastpathT) EncMapUint64Uint8V(v map[uint64]uint8, e *Encoder) {
1608
	e.mapStart(len(v))
1609
	if e.h.Canonical {
1610
		v2 := make([]uint64, len(v))
1611
		var i uint
1612
		for k := range v {
1613
			v2[i] = k
1614
			i++
1615
		}
1616
		sort.Sort(uint64Slice(v2))
1617
		for _, k2 := range v2 {
1618
			e.mapElemKey()
1619
			e.e.EncodeUint(k2)
1620
			e.mapElemValue()
1621
			e.e.EncodeUint(uint64(v[k2]))
1622
		}
1623
	} else {
1624
		for k2, v2 := range v {
1625
			e.mapElemKey()
1626
			e.e.EncodeUint(k2)
1627
			e.mapElemValue()
1628
			e.e.EncodeUint(uint64(v2))
1629
		}
1630
	}
1631
	e.mapEnd()
1632
}
1633
func (e *Encoder) fastpathEncMapUint64Uint64R(f *codecFnInfo, rv reflect.Value) {
1634
	fastpathTV.EncMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), e)
1635
}
1636
func (fastpathT) EncMapUint64Uint64V(v map[uint64]uint64, e *Encoder) {
1637
	e.mapStart(len(v))
1638
	if e.h.Canonical {
1639
		v2 := make([]uint64, len(v))
1640
		var i uint
1641
		for k := range v {
1642
			v2[i] = k
1643
			i++
1644
		}
1645
		sort.Sort(uint64Slice(v2))
1646
		for _, k2 := range v2 {
1647
			e.mapElemKey()
1648
			e.e.EncodeUint(k2)
1649
			e.mapElemValue()
1650
			e.e.EncodeUint(v[k2])
1651
		}
1652
	} else {
1653
		for k2, v2 := range v {
1654
			e.mapElemKey()
1655
			e.e.EncodeUint(k2)
1656
			e.mapElemValue()
1657
			e.e.EncodeUint(v2)
1658
		}
1659
	}
1660
	e.mapEnd()
1661
}
1662
func (e *Encoder) fastpathEncMapUint64IntR(f *codecFnInfo, rv reflect.Value) {
1663
	fastpathTV.EncMapUint64IntV(rv2i(rv).(map[uint64]int), e)
1664
}
1665
func (fastpathT) EncMapUint64IntV(v map[uint64]int, e *Encoder) {
1666
	e.mapStart(len(v))
1667
	if e.h.Canonical {
1668
		v2 := make([]uint64, len(v))
1669
		var i uint
1670
		for k := range v {
1671
			v2[i] = k
1672
			i++
1673
		}
1674
		sort.Sort(uint64Slice(v2))
1675
		for _, k2 := range v2 {
1676
			e.mapElemKey()
1677
			e.e.EncodeUint(k2)
1678
			e.mapElemValue()
1679
			e.e.EncodeInt(int64(v[k2]))
1680
		}
1681
	} else {
1682
		for k2, v2 := range v {
1683
			e.mapElemKey()
1684
			e.e.EncodeUint(k2)
1685
			e.mapElemValue()
1686
			e.e.EncodeInt(int64(v2))
1687
		}
1688
	}
1689
	e.mapEnd()
1690
}
1691
func (e *Encoder) fastpathEncMapUint64Int32R(f *codecFnInfo, rv reflect.Value) {
1692
	fastpathTV.EncMapUint64Int32V(rv2i(rv).(map[uint64]int32), e)
1693
}
1694
func (fastpathT) EncMapUint64Int32V(v map[uint64]int32, e *Encoder) {
1695
	e.mapStart(len(v))
1696
	if e.h.Canonical {
1697
		v2 := make([]uint64, len(v))
1698
		var i uint
1699
		for k := range v {
1700
			v2[i] = k
1701
			i++
1702
		}
1703
		sort.Sort(uint64Slice(v2))
1704
		for _, k2 := range v2 {
1705
			e.mapElemKey()
1706
			e.e.EncodeUint(k2)
1707
			e.mapElemValue()
1708
			e.e.EncodeInt(int64(v[k2]))
1709
		}
1710
	} else {
1711
		for k2, v2 := range v {
1712
			e.mapElemKey()
1713
			e.e.EncodeUint(k2)
1714
			e.mapElemValue()
1715
			e.e.EncodeInt(int64(v2))
1716
		}
1717
	}
1718
	e.mapEnd()
1719
}
1720
func (e *Encoder) fastpathEncMapUint64Float64R(f *codecFnInfo, rv reflect.Value) {
1721
	fastpathTV.EncMapUint64Float64V(rv2i(rv).(map[uint64]float64), e)
1722
}
1723
func (fastpathT) EncMapUint64Float64V(v map[uint64]float64, e *Encoder) {
1724
	e.mapStart(len(v))
1725
	if e.h.Canonical {
1726
		v2 := make([]uint64, len(v))
1727
		var i uint
1728
		for k := range v {
1729
			v2[i] = k
1730
			i++
1731
		}
1732
		sort.Sort(uint64Slice(v2))
1733
		for _, k2 := range v2 {
1734
			e.mapElemKey()
1735
			e.e.EncodeUint(k2)
1736
			e.mapElemValue()
1737
			e.e.EncodeFloat64(v[k2])
1738
		}
1739
	} else {
1740
		for k2, v2 := range v {
1741
			e.mapElemKey()
1742
			e.e.EncodeUint(k2)
1743
			e.mapElemValue()
1744
			e.e.EncodeFloat64(v2)
1745
		}
1746
	}
1747
	e.mapEnd()
1748
}
1749
func (e *Encoder) fastpathEncMapUint64BoolR(f *codecFnInfo, rv reflect.Value) {
1750
	fastpathTV.EncMapUint64BoolV(rv2i(rv).(map[uint64]bool), e)
1751
}
1752
func (fastpathT) EncMapUint64BoolV(v map[uint64]bool, e *Encoder) {
1753
	e.mapStart(len(v))
1754
	if e.h.Canonical {
1755
		v2 := make([]uint64, len(v))
1756
		var i uint
1757
		for k := range v {
1758
			v2[i] = k
1759
			i++
1760
		}
1761
		sort.Sort(uint64Slice(v2))
1762
		for _, k2 := range v2 {
1763
			e.mapElemKey()
1764
			e.e.EncodeUint(k2)
1765
			e.mapElemValue()
1766
			e.e.EncodeBool(v[k2])
1767
		}
1768
	} else {
1769
		for k2, v2 := range v {
1770
			e.mapElemKey()
1771
			e.e.EncodeUint(k2)
1772
			e.mapElemValue()
1773
			e.e.EncodeBool(v2)
1774
		}
1775
	}
1776
	e.mapEnd()
1777
}
1778
func (e *Encoder) fastpathEncMapIntIntfR(f *codecFnInfo, rv reflect.Value) {
1779
	fastpathTV.EncMapIntIntfV(rv2i(rv).(map[int]interface{}), e)
1780
}
1781
func (fastpathT) EncMapIntIntfV(v map[int]interface{}, e *Encoder) {
1782
	e.mapStart(len(v))
1783
	if e.h.Canonical {
1784
		v2 := make([]int, len(v))
1785
		var i uint
1786
		for k := range v {
1787
			v2[i] = k
1788
			i++
1789
		}
1790
		sort.Sort(intSlice(v2))
1791
		for _, k2 := range v2 {
1792
			e.mapElemKey()
1793
			e.e.EncodeInt(int64(k2))
1794
			e.mapElemValue()
1795
			e.encode(v[k2])
1796
		}
1797
	} else {
1798
		for k2, v2 := range v {
1799
			e.mapElemKey()
1800
			e.e.EncodeInt(int64(k2))
1801
			e.mapElemValue()
1802
			e.encode(v2)
1803
		}
1804
	}
1805
	e.mapEnd()
1806
}
1807
func (e *Encoder) fastpathEncMapIntStringR(f *codecFnInfo, rv reflect.Value) {
1808
	fastpathTV.EncMapIntStringV(rv2i(rv).(map[int]string), e)
1809
}
1810
func (fastpathT) EncMapIntStringV(v map[int]string, e *Encoder) {
1811
	e.mapStart(len(v))
1812
	if e.h.Canonical {
1813
		v2 := make([]int, len(v))
1814
		var i uint
1815
		for k := range v {
1816
			v2[i] = k
1817
			i++
1818
		}
1819
		sort.Sort(intSlice(v2))
1820
		for _, k2 := range v2 {
1821
			e.mapElemKey()
1822
			e.e.EncodeInt(int64(k2))
1823
			e.mapElemValue()
1824
			e.e.EncodeString(v[k2])
1825
		}
1826
	} else {
1827
		for k2, v2 := range v {
1828
			e.mapElemKey()
1829
			e.e.EncodeInt(int64(k2))
1830
			e.mapElemValue()
1831
			e.e.EncodeString(v2)
1832
		}
1833
	}
1834
	e.mapEnd()
1835
}
1836
func (e *Encoder) fastpathEncMapIntBytesR(f *codecFnInfo, rv reflect.Value) {
1837
	fastpathTV.EncMapIntBytesV(rv2i(rv).(map[int][]byte), e)
1838
}
1839
func (fastpathT) EncMapIntBytesV(v map[int][]byte, e *Encoder) {
1840
	e.mapStart(len(v))
1841
	if e.h.Canonical {
1842
		v2 := make([]int, len(v))
1843
		var i uint
1844
		for k := range v {
1845
			v2[i] = k
1846
			i++
1847
		}
1848
		sort.Sort(intSlice(v2))
1849
		for _, k2 := range v2 {
1850
			e.mapElemKey()
1851
			e.e.EncodeInt(int64(k2))
1852
			e.mapElemValue()
1853
			e.e.EncodeStringBytesRaw(v[k2])
1854
		}
1855
	} else {
1856
		for k2, v2 := range v {
1857
			e.mapElemKey()
1858
			e.e.EncodeInt(int64(k2))
1859
			e.mapElemValue()
1860
			e.e.EncodeStringBytesRaw(v2)
1861
		}
1862
	}
1863
	e.mapEnd()
1864
}
1865
func (e *Encoder) fastpathEncMapIntUint8R(f *codecFnInfo, rv reflect.Value) {
1866
	fastpathTV.EncMapIntUint8V(rv2i(rv).(map[int]uint8), e)
1867
}
1868
func (fastpathT) EncMapIntUint8V(v map[int]uint8, e *Encoder) {
1869
	e.mapStart(len(v))
1870
	if e.h.Canonical {
1871
		v2 := make([]int, len(v))
1872
		var i uint
1873
		for k := range v {
1874
			v2[i] = k
1875
			i++
1876
		}
1877
		sort.Sort(intSlice(v2))
1878
		for _, k2 := range v2 {
1879
			e.mapElemKey()
1880
			e.e.EncodeInt(int64(k2))
1881
			e.mapElemValue()
1882
			e.e.EncodeUint(uint64(v[k2]))
1883
		}
1884
	} else {
1885
		for k2, v2 := range v {
1886
			e.mapElemKey()
1887
			e.e.EncodeInt(int64(k2))
1888
			e.mapElemValue()
1889
			e.e.EncodeUint(uint64(v2))
1890
		}
1891
	}
1892
	e.mapEnd()
1893
}
1894
func (e *Encoder) fastpathEncMapIntUint64R(f *codecFnInfo, rv reflect.Value) {
1895
	fastpathTV.EncMapIntUint64V(rv2i(rv).(map[int]uint64), e)
1896
}
1897
func (fastpathT) EncMapIntUint64V(v map[int]uint64, e *Encoder) {
1898
	e.mapStart(len(v))
1899
	if e.h.Canonical {
1900
		v2 := make([]int, len(v))
1901
		var i uint
1902
		for k := range v {
1903
			v2[i] = k
1904
			i++
1905
		}
1906
		sort.Sort(intSlice(v2))
1907
		for _, k2 := range v2 {
1908
			e.mapElemKey()
1909
			e.e.EncodeInt(int64(k2))
1910
			e.mapElemValue()
1911
			e.e.EncodeUint(v[k2])
1912
		}
1913
	} else {
1914
		for k2, v2 := range v {
1915
			e.mapElemKey()
1916
			e.e.EncodeInt(int64(k2))
1917
			e.mapElemValue()
1918
			e.e.EncodeUint(v2)
1919
		}
1920
	}
1921
	e.mapEnd()
1922
}
1923
func (e *Encoder) fastpathEncMapIntIntR(f *codecFnInfo, rv reflect.Value) {
1924
	fastpathTV.EncMapIntIntV(rv2i(rv).(map[int]int), e)
1925
}
1926
func (fastpathT) EncMapIntIntV(v map[int]int, e *Encoder) {
1927
	e.mapStart(len(v))
1928
	if e.h.Canonical {
1929
		v2 := make([]int, len(v))
1930
		var i uint
1931
		for k := range v {
1932
			v2[i] = k
1933
			i++
1934
		}
1935
		sort.Sort(intSlice(v2))
1936
		for _, k2 := range v2 {
1937
			e.mapElemKey()
1938
			e.e.EncodeInt(int64(k2))
1939
			e.mapElemValue()
1940
			e.e.EncodeInt(int64(v[k2]))
1941
		}
1942
	} else {
1943
		for k2, v2 := range v {
1944
			e.mapElemKey()
1945
			e.e.EncodeInt(int64(k2))
1946
			e.mapElemValue()
1947
			e.e.EncodeInt(int64(v2))
1948
		}
1949
	}
1950
	e.mapEnd()
1951
}
1952
func (e *Encoder) fastpathEncMapIntInt32R(f *codecFnInfo, rv reflect.Value) {
1953
	fastpathTV.EncMapIntInt32V(rv2i(rv).(map[int]int32), e)
1954
}
1955
func (fastpathT) EncMapIntInt32V(v map[int]int32, e *Encoder) {
1956
	e.mapStart(len(v))
1957
	if e.h.Canonical {
1958
		v2 := make([]int, len(v))
1959
		var i uint
1960
		for k := range v {
1961
			v2[i] = k
1962
			i++
1963
		}
1964
		sort.Sort(intSlice(v2))
1965
		for _, k2 := range v2 {
1966
			e.mapElemKey()
1967
			e.e.EncodeInt(int64(k2))
1968
			e.mapElemValue()
1969
			e.e.EncodeInt(int64(v[k2]))
1970
		}
1971
	} else {
1972
		for k2, v2 := range v {
1973
			e.mapElemKey()
1974
			e.e.EncodeInt(int64(k2))
1975
			e.mapElemValue()
1976
			e.e.EncodeInt(int64(v2))
1977
		}
1978
	}
1979
	e.mapEnd()
1980
}
1981
func (e *Encoder) fastpathEncMapIntFloat64R(f *codecFnInfo, rv reflect.Value) {
1982
	fastpathTV.EncMapIntFloat64V(rv2i(rv).(map[int]float64), e)
1983
}
1984
func (fastpathT) EncMapIntFloat64V(v map[int]float64, e *Encoder) {
1985
	e.mapStart(len(v))
1986
	if e.h.Canonical {
1987
		v2 := make([]int, len(v))
1988
		var i uint
1989
		for k := range v {
1990
			v2[i] = k
1991
			i++
1992
		}
1993
		sort.Sort(intSlice(v2))
1994
		for _, k2 := range v2 {
1995
			e.mapElemKey()
1996
			e.e.EncodeInt(int64(k2))
1997
			e.mapElemValue()
1998
			e.e.EncodeFloat64(v[k2])
1999
		}
2000
	} else {
2001
		for k2, v2 := range v {
2002
			e.mapElemKey()
2003
			e.e.EncodeInt(int64(k2))
2004
			e.mapElemValue()
2005
			e.e.EncodeFloat64(v2)
2006
		}
2007
	}
2008
	e.mapEnd()
2009
}
2010
func (e *Encoder) fastpathEncMapIntBoolR(f *codecFnInfo, rv reflect.Value) {
2011
	fastpathTV.EncMapIntBoolV(rv2i(rv).(map[int]bool), e)
2012
}
2013
func (fastpathT) EncMapIntBoolV(v map[int]bool, e *Encoder) {
2014
	e.mapStart(len(v))
2015
	if e.h.Canonical {
2016
		v2 := make([]int, len(v))
2017
		var i uint
2018
		for k := range v {
2019
			v2[i] = k
2020
			i++
2021
		}
2022
		sort.Sort(intSlice(v2))
2023
		for _, k2 := range v2 {
2024
			e.mapElemKey()
2025
			e.e.EncodeInt(int64(k2))
2026
			e.mapElemValue()
2027
			e.e.EncodeBool(v[k2])
2028
		}
2029
	} else {
2030
		for k2, v2 := range v {
2031
			e.mapElemKey()
2032
			e.e.EncodeInt(int64(k2))
2033
			e.mapElemValue()
2034
			e.e.EncodeBool(v2)
2035
		}
2036
	}
2037
	e.mapEnd()
2038
}
2039
func (e *Encoder) fastpathEncMapInt32IntfR(f *codecFnInfo, rv reflect.Value) {
2040
	fastpathTV.EncMapInt32IntfV(rv2i(rv).(map[int32]interface{}), e)
2041
}
2042
func (fastpathT) EncMapInt32IntfV(v map[int32]interface{}, e *Encoder) {
2043
	e.mapStart(len(v))
2044
	if e.h.Canonical {
2045
		v2 := make([]int32, len(v))
2046
		var i uint
2047
		for k := range v {
2048
			v2[i] = k
2049
			i++
2050
		}
2051
		sort.Sort(int32Slice(v2))
2052
		for _, k2 := range v2 {
2053
			e.mapElemKey()
2054
			e.e.EncodeInt(int64(k2))
2055
			e.mapElemValue()
2056
			e.encode(v[k2])
2057
		}
2058
	} else {
2059
		for k2, v2 := range v {
2060
			e.mapElemKey()
2061
			e.e.EncodeInt(int64(k2))
2062
			e.mapElemValue()
2063
			e.encode(v2)
2064
		}
2065
	}
2066
	e.mapEnd()
2067
}
2068
func (e *Encoder) fastpathEncMapInt32StringR(f *codecFnInfo, rv reflect.Value) {
2069
	fastpathTV.EncMapInt32StringV(rv2i(rv).(map[int32]string), e)
2070
}
2071
func (fastpathT) EncMapInt32StringV(v map[int32]string, e *Encoder) {
2072
	e.mapStart(len(v))
2073
	if e.h.Canonical {
2074
		v2 := make([]int32, len(v))
2075
		var i uint
2076
		for k := range v {
2077
			v2[i] = k
2078
			i++
2079
		}
2080
		sort.Sort(int32Slice(v2))
2081
		for _, k2 := range v2 {
2082
			e.mapElemKey()
2083
			e.e.EncodeInt(int64(k2))
2084
			e.mapElemValue()
2085
			e.e.EncodeString(v[k2])
2086
		}
2087
	} else {
2088
		for k2, v2 := range v {
2089
			e.mapElemKey()
2090
			e.e.EncodeInt(int64(k2))
2091
			e.mapElemValue()
2092
			e.e.EncodeString(v2)
2093
		}
2094
	}
2095
	e.mapEnd()
2096
}
2097
func (e *Encoder) fastpathEncMapInt32BytesR(f *codecFnInfo, rv reflect.Value) {
2098
	fastpathTV.EncMapInt32BytesV(rv2i(rv).(map[int32][]byte), e)
2099
}
2100
func (fastpathT) EncMapInt32BytesV(v map[int32][]byte, e *Encoder) {
2101
	e.mapStart(len(v))
2102
	if e.h.Canonical {
2103
		v2 := make([]int32, len(v))
2104
		var i uint
2105
		for k := range v {
2106
			v2[i] = k
2107
			i++
2108
		}
2109
		sort.Sort(int32Slice(v2))
2110
		for _, k2 := range v2 {
2111
			e.mapElemKey()
2112
			e.e.EncodeInt(int64(k2))
2113
			e.mapElemValue()
2114
			e.e.EncodeStringBytesRaw(v[k2])
2115
		}
2116
	} else {
2117
		for k2, v2 := range v {
2118
			e.mapElemKey()
2119
			e.e.EncodeInt(int64(k2))
2120
			e.mapElemValue()
2121
			e.e.EncodeStringBytesRaw(v2)
2122
		}
2123
	}
2124
	e.mapEnd()
2125
}
2126
func (e *Encoder) fastpathEncMapInt32Uint8R(f *codecFnInfo, rv reflect.Value) {
2127
	fastpathTV.EncMapInt32Uint8V(rv2i(rv).(map[int32]uint8), e)
2128
}
2129
func (fastpathT) EncMapInt32Uint8V(v map[int32]uint8, e *Encoder) {
2130
	e.mapStart(len(v))
2131
	if e.h.Canonical {
2132
		v2 := make([]int32, len(v))
2133
		var i uint
2134
		for k := range v {
2135
			v2[i] = k
2136
			i++
2137
		}
2138
		sort.Sort(int32Slice(v2))
2139
		for _, k2 := range v2 {
2140
			e.mapElemKey()
2141
			e.e.EncodeInt(int64(k2))
2142
			e.mapElemValue()
2143
			e.e.EncodeUint(uint64(v[k2]))
2144
		}
2145
	} else {
2146
		for k2, v2 := range v {
2147
			e.mapElemKey()
2148
			e.e.EncodeInt(int64(k2))
2149
			e.mapElemValue()
2150
			e.e.EncodeUint(uint64(v2))
2151
		}
2152
	}
2153
	e.mapEnd()
2154
}
2155
func (e *Encoder) fastpathEncMapInt32Uint64R(f *codecFnInfo, rv reflect.Value) {
2156
	fastpathTV.EncMapInt32Uint64V(rv2i(rv).(map[int32]uint64), e)
2157
}
2158
func (fastpathT) EncMapInt32Uint64V(v map[int32]uint64, e *Encoder) {
2159
	e.mapStart(len(v))
2160
	if e.h.Canonical {
2161
		v2 := make([]int32, len(v))
2162
		var i uint
2163
		for k := range v {
2164
			v2[i] = k
2165
			i++
2166
		}
2167
		sort.Sort(int32Slice(v2))
2168
		for _, k2 := range v2 {
2169
			e.mapElemKey()
2170
			e.e.EncodeInt(int64(k2))
2171
			e.mapElemValue()
2172
			e.e.EncodeUint(v[k2])
2173
		}
2174
	} else {
2175
		for k2, v2 := range v {
2176
			e.mapElemKey()
2177
			e.e.EncodeInt(int64(k2))
2178
			e.mapElemValue()
2179
			e.e.EncodeUint(v2)
2180
		}
2181
	}
2182
	e.mapEnd()
2183
}
2184
func (e *Encoder) fastpathEncMapInt32IntR(f *codecFnInfo, rv reflect.Value) {
2185
	fastpathTV.EncMapInt32IntV(rv2i(rv).(map[int32]int), e)
2186
}
2187
func (fastpathT) EncMapInt32IntV(v map[int32]int, e *Encoder) {
2188
	e.mapStart(len(v))
2189
	if e.h.Canonical {
2190
		v2 := make([]int32, len(v))
2191
		var i uint
2192
		for k := range v {
2193
			v2[i] = k
2194
			i++
2195
		}
2196
		sort.Sort(int32Slice(v2))
2197
		for _, k2 := range v2 {
2198
			e.mapElemKey()
2199
			e.e.EncodeInt(int64(k2))
2200
			e.mapElemValue()
2201
			e.e.EncodeInt(int64(v[k2]))
2202
		}
2203
	} else {
2204
		for k2, v2 := range v {
2205
			e.mapElemKey()
2206
			e.e.EncodeInt(int64(k2))
2207
			e.mapElemValue()
2208
			e.e.EncodeInt(int64(v2))
2209
		}
2210
	}
2211
	e.mapEnd()
2212
}
2213
func (e *Encoder) fastpathEncMapInt32Int32R(f *codecFnInfo, rv reflect.Value) {
2214
	fastpathTV.EncMapInt32Int32V(rv2i(rv).(map[int32]int32), e)
2215
}
2216
func (fastpathT) EncMapInt32Int32V(v map[int32]int32, e *Encoder) {
2217
	e.mapStart(len(v))
2218
	if e.h.Canonical {
2219
		v2 := make([]int32, len(v))
2220
		var i uint
2221
		for k := range v {
2222
			v2[i] = k
2223
			i++
2224
		}
2225
		sort.Sort(int32Slice(v2))
2226
		for _, k2 := range v2 {
2227
			e.mapElemKey()
2228
			e.e.EncodeInt(int64(k2))
2229
			e.mapElemValue()
2230
			e.e.EncodeInt(int64(v[k2]))
2231
		}
2232
	} else {
2233
		for k2, v2 := range v {
2234
			e.mapElemKey()
2235
			e.e.EncodeInt(int64(k2))
2236
			e.mapElemValue()
2237
			e.e.EncodeInt(int64(v2))
2238
		}
2239
	}
2240
	e.mapEnd()
2241
}
2242
func (e *Encoder) fastpathEncMapInt32Float64R(f *codecFnInfo, rv reflect.Value) {
2243
	fastpathTV.EncMapInt32Float64V(rv2i(rv).(map[int32]float64), e)
2244
}
2245
func (fastpathT) EncMapInt32Float64V(v map[int32]float64, e *Encoder) {
2246
	e.mapStart(len(v))
2247
	if e.h.Canonical {
2248
		v2 := make([]int32, len(v))
2249
		var i uint
2250
		for k := range v {
2251
			v2[i] = k
2252
			i++
2253
		}
2254
		sort.Sort(int32Slice(v2))
2255
		for _, k2 := range v2 {
2256
			e.mapElemKey()
2257
			e.e.EncodeInt(int64(k2))
2258
			e.mapElemValue()
2259
			e.e.EncodeFloat64(v[k2])
2260
		}
2261
	} else {
2262
		for k2, v2 := range v {
2263
			e.mapElemKey()
2264
			e.e.EncodeInt(int64(k2))
2265
			e.mapElemValue()
2266
			e.e.EncodeFloat64(v2)
2267
		}
2268
	}
2269
	e.mapEnd()
2270
}
2271
func (e *Encoder) fastpathEncMapInt32BoolR(f *codecFnInfo, rv reflect.Value) {
2272
	fastpathTV.EncMapInt32BoolV(rv2i(rv).(map[int32]bool), e)
2273
}
2274
func (fastpathT) EncMapInt32BoolV(v map[int32]bool, e *Encoder) {
2275
	e.mapStart(len(v))
2276
	if e.h.Canonical {
2277
		v2 := make([]int32, len(v))
2278
		var i uint
2279
		for k := range v {
2280
			v2[i] = k
2281
			i++
2282
		}
2283
		sort.Sort(int32Slice(v2))
2284
		for _, k2 := range v2 {
2285
			e.mapElemKey()
2286
			e.e.EncodeInt(int64(k2))
2287
			e.mapElemValue()
2288
			e.e.EncodeBool(v[k2])
2289
		}
2290
	} else {
2291
		for k2, v2 := range v {
2292
			e.mapElemKey()
2293
			e.e.EncodeInt(int64(k2))
2294
			e.mapElemValue()
2295
			e.e.EncodeBool(v2)
2296
		}
2297
	}
2298
	e.mapEnd()
2299
}
2300

2301
// -- decode
2302

2303
// -- -- fast path type switch
2304
func fastpathDecodeTypeSwitch(iv interface{}, d *Decoder) bool {
2305
	var changed bool
2306
	var containerLen int
2307
	switch v := iv.(type) {
2308
	case []interface{}:
2309
		fastpathTV.DecSliceIntfN(v, d)
2310
	case *[]interface{}:
2311
		var v2 []interface{}
2312
		if v2, changed = fastpathTV.DecSliceIntfY(*v, d); changed {
2313
			*v = v2
2314
		}
2315
	case []string:
2316
		fastpathTV.DecSliceStringN(v, d)
2317
	case *[]string:
2318
		var v2 []string
2319
		if v2, changed = fastpathTV.DecSliceStringY(*v, d); changed {
2320
			*v = v2
2321
		}
2322
	case [][]byte:
2323
		fastpathTV.DecSliceBytesN(v, d)
2324
	case *[][]byte:
2325
		var v2 [][]byte
2326
		if v2, changed = fastpathTV.DecSliceBytesY(*v, d); changed {
2327
			*v = v2
2328
		}
2329
	case []float32:
2330
		fastpathTV.DecSliceFloat32N(v, d)
2331
	case *[]float32:
2332
		var v2 []float32
2333
		if v2, changed = fastpathTV.DecSliceFloat32Y(*v, d); changed {
2334
			*v = v2
2335
		}
2336
	case []float64:
2337
		fastpathTV.DecSliceFloat64N(v, d)
2338
	case *[]float64:
2339
		var v2 []float64
2340
		if v2, changed = fastpathTV.DecSliceFloat64Y(*v, d); changed {
2341
			*v = v2
2342
		}
2343
	case []uint8:
2344
		fastpathTV.DecSliceUint8N(v, d)
2345
	case *[]uint8:
2346
		var v2 []uint8
2347
		if v2, changed = fastpathTV.DecSliceUint8Y(*v, d); changed {
2348
			*v = v2
2349
		}
2350
	case []uint64:
2351
		fastpathTV.DecSliceUint64N(v, d)
2352
	case *[]uint64:
2353
		var v2 []uint64
2354
		if v2, changed = fastpathTV.DecSliceUint64Y(*v, d); changed {
2355
			*v = v2
2356
		}
2357
	case []int:
2358
		fastpathTV.DecSliceIntN(v, d)
2359
	case *[]int:
2360
		var v2 []int
2361
		if v2, changed = fastpathTV.DecSliceIntY(*v, d); changed {
2362
			*v = v2
2363
		}
2364
	case []int32:
2365
		fastpathTV.DecSliceInt32N(v, d)
2366
	case *[]int32:
2367
		var v2 []int32
2368
		if v2, changed = fastpathTV.DecSliceInt32Y(*v, d); changed {
2369
			*v = v2
2370
		}
2371
	case []int64:
2372
		fastpathTV.DecSliceInt64N(v, d)
2373
	case *[]int64:
2374
		var v2 []int64
2375
		if v2, changed = fastpathTV.DecSliceInt64Y(*v, d); changed {
2376
			*v = v2
2377
		}
2378
	case []bool:
2379
		fastpathTV.DecSliceBoolN(v, d)
2380
	case *[]bool:
2381
		var v2 []bool
2382
		if v2, changed = fastpathTV.DecSliceBoolY(*v, d); changed {
2383
			*v = v2
2384
		}
2385
	case map[string]interface{}:
2386
		containerLen = d.mapStart(d.d.ReadMapStart())
2387
		if containerLen != containerLenNil {
2388
			if containerLen != 0 {
2389
				fastpathTV.DecMapStringIntfL(v, containerLen, d)
2390
			}
2391
			d.mapEnd()
2392
		}
2393
	case *map[string]interface{}:
2394
		fastpathTV.DecMapStringIntfX(v, d)
2395
	case map[string]string:
2396
		containerLen = d.mapStart(d.d.ReadMapStart())
2397
		if containerLen != containerLenNil {
2398
			if containerLen != 0 {
2399
				fastpathTV.DecMapStringStringL(v, containerLen, d)
2400
			}
2401
			d.mapEnd()
2402
		}
2403
	case *map[string]string:
2404
		fastpathTV.DecMapStringStringX(v, d)
2405
	case map[string][]byte:
2406
		containerLen = d.mapStart(d.d.ReadMapStart())
2407
		if containerLen != containerLenNil {
2408
			if containerLen != 0 {
2409
				fastpathTV.DecMapStringBytesL(v, containerLen, d)
2410
			}
2411
			d.mapEnd()
2412
		}
2413
	case *map[string][]byte:
2414
		fastpathTV.DecMapStringBytesX(v, d)
2415
	case map[string]uint8:
2416
		containerLen = d.mapStart(d.d.ReadMapStart())
2417
		if containerLen != containerLenNil {
2418
			if containerLen != 0 {
2419
				fastpathTV.DecMapStringUint8L(v, containerLen, d)
2420
			}
2421
			d.mapEnd()
2422
		}
2423
	case *map[string]uint8:
2424
		fastpathTV.DecMapStringUint8X(v, d)
2425
	case map[string]uint64:
2426
		containerLen = d.mapStart(d.d.ReadMapStart())
2427
		if containerLen != containerLenNil {
2428
			if containerLen != 0 {
2429
				fastpathTV.DecMapStringUint64L(v, containerLen, d)
2430
			}
2431
			d.mapEnd()
2432
		}
2433
	case *map[string]uint64:
2434
		fastpathTV.DecMapStringUint64X(v, d)
2435
	case map[string]int:
2436
		containerLen = d.mapStart(d.d.ReadMapStart())
2437
		if containerLen != containerLenNil {
2438
			if containerLen != 0 {
2439
				fastpathTV.DecMapStringIntL(v, containerLen, d)
2440
			}
2441
			d.mapEnd()
2442
		}
2443
	case *map[string]int:
2444
		fastpathTV.DecMapStringIntX(v, d)
2445
	case map[string]int32:
2446
		containerLen = d.mapStart(d.d.ReadMapStart())
2447
		if containerLen != containerLenNil {
2448
			if containerLen != 0 {
2449
				fastpathTV.DecMapStringInt32L(v, containerLen, d)
2450
			}
2451
			d.mapEnd()
2452
		}
2453
	case *map[string]int32:
2454
		fastpathTV.DecMapStringInt32X(v, d)
2455
	case map[string]float64:
2456
		containerLen = d.mapStart(d.d.ReadMapStart())
2457
		if containerLen != containerLenNil {
2458
			if containerLen != 0 {
2459
				fastpathTV.DecMapStringFloat64L(v, containerLen, d)
2460
			}
2461
			d.mapEnd()
2462
		}
2463
	case *map[string]float64:
2464
		fastpathTV.DecMapStringFloat64X(v, d)
2465
	case map[string]bool:
2466
		containerLen = d.mapStart(d.d.ReadMapStart())
2467
		if containerLen != containerLenNil {
2468
			if containerLen != 0 {
2469
				fastpathTV.DecMapStringBoolL(v, containerLen, d)
2470
			}
2471
			d.mapEnd()
2472
		}
2473
	case *map[string]bool:
2474
		fastpathTV.DecMapStringBoolX(v, d)
2475
	case map[uint8]interface{}:
2476
		containerLen = d.mapStart(d.d.ReadMapStart())
2477
		if containerLen != containerLenNil {
2478
			if containerLen != 0 {
2479
				fastpathTV.DecMapUint8IntfL(v, containerLen, d)
2480
			}
2481
			d.mapEnd()
2482
		}
2483
	case *map[uint8]interface{}:
2484
		fastpathTV.DecMapUint8IntfX(v, d)
2485
	case map[uint8]string:
2486
		containerLen = d.mapStart(d.d.ReadMapStart())
2487
		if containerLen != containerLenNil {
2488
			if containerLen != 0 {
2489
				fastpathTV.DecMapUint8StringL(v, containerLen, d)
2490
			}
2491
			d.mapEnd()
2492
		}
2493
	case *map[uint8]string:
2494
		fastpathTV.DecMapUint8StringX(v, d)
2495
	case map[uint8][]byte:
2496
		containerLen = d.mapStart(d.d.ReadMapStart())
2497
		if containerLen != containerLenNil {
2498
			if containerLen != 0 {
2499
				fastpathTV.DecMapUint8BytesL(v, containerLen, d)
2500
			}
2501
			d.mapEnd()
2502
		}
2503
	case *map[uint8][]byte:
2504
		fastpathTV.DecMapUint8BytesX(v, d)
2505
	case map[uint8]uint8:
2506
		containerLen = d.mapStart(d.d.ReadMapStart())
2507
		if containerLen != containerLenNil {
2508
			if containerLen != 0 {
2509
				fastpathTV.DecMapUint8Uint8L(v, containerLen, d)
2510
			}
2511
			d.mapEnd()
2512
		}
2513
	case *map[uint8]uint8:
2514
		fastpathTV.DecMapUint8Uint8X(v, d)
2515
	case map[uint8]uint64:
2516
		containerLen = d.mapStart(d.d.ReadMapStart())
2517
		if containerLen != containerLenNil {
2518
			if containerLen != 0 {
2519
				fastpathTV.DecMapUint8Uint64L(v, containerLen, d)
2520
			}
2521
			d.mapEnd()
2522
		}
2523
	case *map[uint8]uint64:
2524
		fastpathTV.DecMapUint8Uint64X(v, d)
2525
	case map[uint8]int:
2526
		containerLen = d.mapStart(d.d.ReadMapStart())
2527
		if containerLen != containerLenNil {
2528
			if containerLen != 0 {
2529
				fastpathTV.DecMapUint8IntL(v, containerLen, d)
2530
			}
2531
			d.mapEnd()
2532
		}
2533
	case *map[uint8]int:
2534
		fastpathTV.DecMapUint8IntX(v, d)
2535
	case map[uint8]int32:
2536
		containerLen = d.mapStart(d.d.ReadMapStart())
2537
		if containerLen != containerLenNil {
2538
			if containerLen != 0 {
2539
				fastpathTV.DecMapUint8Int32L(v, containerLen, d)
2540
			}
2541
			d.mapEnd()
2542
		}
2543
	case *map[uint8]int32:
2544
		fastpathTV.DecMapUint8Int32X(v, d)
2545
	case map[uint8]float64:
2546
		containerLen = d.mapStart(d.d.ReadMapStart())
2547
		if containerLen != containerLenNil {
2548
			if containerLen != 0 {
2549
				fastpathTV.DecMapUint8Float64L(v, containerLen, d)
2550
			}
2551
			d.mapEnd()
2552
		}
2553
	case *map[uint8]float64:
2554
		fastpathTV.DecMapUint8Float64X(v, d)
2555
	case map[uint8]bool:
2556
		containerLen = d.mapStart(d.d.ReadMapStart())
2557
		if containerLen != containerLenNil {
2558
			if containerLen != 0 {
2559
				fastpathTV.DecMapUint8BoolL(v, containerLen, d)
2560
			}
2561
			d.mapEnd()
2562
		}
2563
	case *map[uint8]bool:
2564
		fastpathTV.DecMapUint8BoolX(v, d)
2565
	case map[uint64]interface{}:
2566
		containerLen = d.mapStart(d.d.ReadMapStart())
2567
		if containerLen != containerLenNil {
2568
			if containerLen != 0 {
2569
				fastpathTV.DecMapUint64IntfL(v, containerLen, d)
2570
			}
2571
			d.mapEnd()
2572
		}
2573
	case *map[uint64]interface{}:
2574
		fastpathTV.DecMapUint64IntfX(v, d)
2575
	case map[uint64]string:
2576
		containerLen = d.mapStart(d.d.ReadMapStart())
2577
		if containerLen != containerLenNil {
2578
			if containerLen != 0 {
2579
				fastpathTV.DecMapUint64StringL(v, containerLen, d)
2580
			}
2581
			d.mapEnd()
2582
		}
2583
	case *map[uint64]string:
2584
		fastpathTV.DecMapUint64StringX(v, d)
2585
	case map[uint64][]byte:
2586
		containerLen = d.mapStart(d.d.ReadMapStart())
2587
		if containerLen != containerLenNil {
2588
			if containerLen != 0 {
2589
				fastpathTV.DecMapUint64BytesL(v, containerLen, d)
2590
			}
2591
			d.mapEnd()
2592
		}
2593
	case *map[uint64][]byte:
2594
		fastpathTV.DecMapUint64BytesX(v, d)
2595
	case map[uint64]uint8:
2596
		containerLen = d.mapStart(d.d.ReadMapStart())
2597
		if containerLen != containerLenNil {
2598
			if containerLen != 0 {
2599
				fastpathTV.DecMapUint64Uint8L(v, containerLen, d)
2600
			}
2601
			d.mapEnd()
2602
		}
2603
	case *map[uint64]uint8:
2604
		fastpathTV.DecMapUint64Uint8X(v, d)
2605
	case map[uint64]uint64:
2606
		containerLen = d.mapStart(d.d.ReadMapStart())
2607
		if containerLen != containerLenNil {
2608
			if containerLen != 0 {
2609
				fastpathTV.DecMapUint64Uint64L(v, containerLen, d)
2610
			}
2611
			d.mapEnd()
2612
		}
2613
	case *map[uint64]uint64:
2614
		fastpathTV.DecMapUint64Uint64X(v, d)
2615
	case map[uint64]int:
2616
		containerLen = d.mapStart(d.d.ReadMapStart())
2617
		if containerLen != containerLenNil {
2618
			if containerLen != 0 {
2619
				fastpathTV.DecMapUint64IntL(v, containerLen, d)
2620
			}
2621
			d.mapEnd()
2622
		}
2623
	case *map[uint64]int:
2624
		fastpathTV.DecMapUint64IntX(v, d)
2625
	case map[uint64]int32:
2626
		containerLen = d.mapStart(d.d.ReadMapStart())
2627
		if containerLen != containerLenNil {
2628
			if containerLen != 0 {
2629
				fastpathTV.DecMapUint64Int32L(v, containerLen, d)
2630
			}
2631
			d.mapEnd()
2632
		}
2633
	case *map[uint64]int32:
2634
		fastpathTV.DecMapUint64Int32X(v, d)
2635
	case map[uint64]float64:
2636
		containerLen = d.mapStart(d.d.ReadMapStart())
2637
		if containerLen != containerLenNil {
2638
			if containerLen != 0 {
2639
				fastpathTV.DecMapUint64Float64L(v, containerLen, d)
2640
			}
2641
			d.mapEnd()
2642
		}
2643
	case *map[uint64]float64:
2644
		fastpathTV.DecMapUint64Float64X(v, d)
2645
	case map[uint64]bool:
2646
		containerLen = d.mapStart(d.d.ReadMapStart())
2647
		if containerLen != containerLenNil {
2648
			if containerLen != 0 {
2649
				fastpathTV.DecMapUint64BoolL(v, containerLen, d)
2650
			}
2651
			d.mapEnd()
2652
		}
2653
	case *map[uint64]bool:
2654
		fastpathTV.DecMapUint64BoolX(v, d)
2655
	case map[int]interface{}:
2656
		containerLen = d.mapStart(d.d.ReadMapStart())
2657
		if containerLen != containerLenNil {
2658
			if containerLen != 0 {
2659
				fastpathTV.DecMapIntIntfL(v, containerLen, d)
2660
			}
2661
			d.mapEnd()
2662
		}
2663
	case *map[int]interface{}:
2664
		fastpathTV.DecMapIntIntfX(v, d)
2665
	case map[int]string:
2666
		containerLen = d.mapStart(d.d.ReadMapStart())
2667
		if containerLen != containerLenNil {
2668
			if containerLen != 0 {
2669
				fastpathTV.DecMapIntStringL(v, containerLen, d)
2670
			}
2671
			d.mapEnd()
2672
		}
2673
	case *map[int]string:
2674
		fastpathTV.DecMapIntStringX(v, d)
2675
	case map[int][]byte:
2676
		containerLen = d.mapStart(d.d.ReadMapStart())
2677
		if containerLen != containerLenNil {
2678
			if containerLen != 0 {
2679
				fastpathTV.DecMapIntBytesL(v, containerLen, d)
2680
			}
2681
			d.mapEnd()
2682
		}
2683
	case *map[int][]byte:
2684
		fastpathTV.DecMapIntBytesX(v, d)
2685
	case map[int]uint8:
2686
		containerLen = d.mapStart(d.d.ReadMapStart())
2687
		if containerLen != containerLenNil {
2688
			if containerLen != 0 {
2689
				fastpathTV.DecMapIntUint8L(v, containerLen, d)
2690
			}
2691
			d.mapEnd()
2692
		}
2693
	case *map[int]uint8:
2694
		fastpathTV.DecMapIntUint8X(v, d)
2695
	case map[int]uint64:
2696
		containerLen = d.mapStart(d.d.ReadMapStart())
2697
		if containerLen != containerLenNil {
2698
			if containerLen != 0 {
2699
				fastpathTV.DecMapIntUint64L(v, containerLen, d)
2700
			}
2701
			d.mapEnd()
2702
		}
2703
	case *map[int]uint64:
2704
		fastpathTV.DecMapIntUint64X(v, d)
2705
	case map[int]int:
2706
		containerLen = d.mapStart(d.d.ReadMapStart())
2707
		if containerLen != containerLenNil {
2708
			if containerLen != 0 {
2709
				fastpathTV.DecMapIntIntL(v, containerLen, d)
2710
			}
2711
			d.mapEnd()
2712
		}
2713
	case *map[int]int:
2714
		fastpathTV.DecMapIntIntX(v, d)
2715
	case map[int]int32:
2716
		containerLen = d.mapStart(d.d.ReadMapStart())
2717
		if containerLen != containerLenNil {
2718
			if containerLen != 0 {
2719
				fastpathTV.DecMapIntInt32L(v, containerLen, d)
2720
			}
2721
			d.mapEnd()
2722
		}
2723
	case *map[int]int32:
2724
		fastpathTV.DecMapIntInt32X(v, d)
2725
	case map[int]float64:
2726
		containerLen = d.mapStart(d.d.ReadMapStart())
2727
		if containerLen != containerLenNil {
2728
			if containerLen != 0 {
2729
				fastpathTV.DecMapIntFloat64L(v, containerLen, d)
2730
			}
2731
			d.mapEnd()
2732
		}
2733
	case *map[int]float64:
2734
		fastpathTV.DecMapIntFloat64X(v, d)
2735
	case map[int]bool:
2736
		containerLen = d.mapStart(d.d.ReadMapStart())
2737
		if containerLen != containerLenNil {
2738
			if containerLen != 0 {
2739
				fastpathTV.DecMapIntBoolL(v, containerLen, d)
2740
			}
2741
			d.mapEnd()
2742
		}
2743
	case *map[int]bool:
2744
		fastpathTV.DecMapIntBoolX(v, d)
2745
	case map[int32]interface{}:
2746
		containerLen = d.mapStart(d.d.ReadMapStart())
2747
		if containerLen != containerLenNil {
2748
			if containerLen != 0 {
2749
				fastpathTV.DecMapInt32IntfL(v, containerLen, d)
2750
			}
2751
			d.mapEnd()
2752
		}
2753
	case *map[int32]interface{}:
2754
		fastpathTV.DecMapInt32IntfX(v, d)
2755
	case map[int32]string:
2756
		containerLen = d.mapStart(d.d.ReadMapStart())
2757
		if containerLen != containerLenNil {
2758
			if containerLen != 0 {
2759
				fastpathTV.DecMapInt32StringL(v, containerLen, d)
2760
			}
2761
			d.mapEnd()
2762
		}
2763
	case *map[int32]string:
2764
		fastpathTV.DecMapInt32StringX(v, d)
2765
	case map[int32][]byte:
2766
		containerLen = d.mapStart(d.d.ReadMapStart())
2767
		if containerLen != containerLenNil {
2768
			if containerLen != 0 {
2769
				fastpathTV.DecMapInt32BytesL(v, containerLen, d)
2770
			}
2771
			d.mapEnd()
2772
		}
2773
	case *map[int32][]byte:
2774
		fastpathTV.DecMapInt32BytesX(v, d)
2775
	case map[int32]uint8:
2776
		containerLen = d.mapStart(d.d.ReadMapStart())
2777
		if containerLen != containerLenNil {
2778
			if containerLen != 0 {
2779
				fastpathTV.DecMapInt32Uint8L(v, containerLen, d)
2780
			}
2781
			d.mapEnd()
2782
		}
2783
	case *map[int32]uint8:
2784
		fastpathTV.DecMapInt32Uint8X(v, d)
2785
	case map[int32]uint64:
2786
		containerLen = d.mapStart(d.d.ReadMapStart())
2787
		if containerLen != containerLenNil {
2788
			if containerLen != 0 {
2789
				fastpathTV.DecMapInt32Uint64L(v, containerLen, d)
2790
			}
2791
			d.mapEnd()
2792
		}
2793
	case *map[int32]uint64:
2794
		fastpathTV.DecMapInt32Uint64X(v, d)
2795
	case map[int32]int:
2796
		containerLen = d.mapStart(d.d.ReadMapStart())
2797
		if containerLen != containerLenNil {
2798
			if containerLen != 0 {
2799
				fastpathTV.DecMapInt32IntL(v, containerLen, d)
2800
			}
2801
			d.mapEnd()
2802
		}
2803
	case *map[int32]int:
2804
		fastpathTV.DecMapInt32IntX(v, d)
2805
	case map[int32]int32:
2806
		containerLen = d.mapStart(d.d.ReadMapStart())
2807
		if containerLen != containerLenNil {
2808
			if containerLen != 0 {
2809
				fastpathTV.DecMapInt32Int32L(v, containerLen, d)
2810
			}
2811
			d.mapEnd()
2812
		}
2813
	case *map[int32]int32:
2814
		fastpathTV.DecMapInt32Int32X(v, d)
2815
	case map[int32]float64:
2816
		containerLen = d.mapStart(d.d.ReadMapStart())
2817
		if containerLen != containerLenNil {
2818
			if containerLen != 0 {
2819
				fastpathTV.DecMapInt32Float64L(v, containerLen, d)
2820
			}
2821
			d.mapEnd()
2822
		}
2823
	case *map[int32]float64:
2824
		fastpathTV.DecMapInt32Float64X(v, d)
2825
	case map[int32]bool:
2826
		containerLen = d.mapStart(d.d.ReadMapStart())
2827
		if containerLen != containerLenNil {
2828
			if containerLen != 0 {
2829
				fastpathTV.DecMapInt32BoolL(v, containerLen, d)
2830
			}
2831
			d.mapEnd()
2832
		}
2833
	case *map[int32]bool:
2834
		fastpathTV.DecMapInt32BoolX(v, d)
2835
	default:
2836
		_ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4
2837
		return false
2838
	}
2839
	return true
2840
}
2841

2842
func fastpathDecodeSetZeroTypeSwitch(iv interface{}) bool {
2843
	switch v := iv.(type) {
2844
	case *[]interface{}:
2845
		*v = nil
2846
	case *[]string:
2847
		*v = nil
2848
	case *[][]byte:
2849
		*v = nil
2850
	case *[]float32:
2851
		*v = nil
2852
	case *[]float64:
2853
		*v = nil
2854
	case *[]uint8:
2855
		*v = nil
2856
	case *[]uint64:
2857
		*v = nil
2858
	case *[]int:
2859
		*v = nil
2860
	case *[]int32:
2861
		*v = nil
2862
	case *[]int64:
2863
		*v = nil
2864
	case *[]bool:
2865
		*v = nil
2866

2867
	case *map[string]interface{}:
2868
		*v = nil
2869
	case *map[string]string:
2870
		*v = nil
2871
	case *map[string][]byte:
2872
		*v = nil
2873
	case *map[string]uint8:
2874
		*v = nil
2875
	case *map[string]uint64:
2876
		*v = nil
2877
	case *map[string]int:
2878
		*v = nil
2879
	case *map[string]int32:
2880
		*v = nil
2881
	case *map[string]float64:
2882
		*v = nil
2883
	case *map[string]bool:
2884
		*v = nil
2885
	case *map[uint8]interface{}:
2886
		*v = nil
2887
	case *map[uint8]string:
2888
		*v = nil
2889
	case *map[uint8][]byte:
2890
		*v = nil
2891
	case *map[uint8]uint8:
2892
		*v = nil
2893
	case *map[uint8]uint64:
2894
		*v = nil
2895
	case *map[uint8]int:
2896
		*v = nil
2897
	case *map[uint8]int32:
2898
		*v = nil
2899
	case *map[uint8]float64:
2900
		*v = nil
2901
	case *map[uint8]bool:
2902
		*v = nil
2903
	case *map[uint64]interface{}:
2904
		*v = nil
2905
	case *map[uint64]string:
2906
		*v = nil
2907
	case *map[uint64][]byte:
2908
		*v = nil
2909
	case *map[uint64]uint8:
2910
		*v = nil
2911
	case *map[uint64]uint64:
2912
		*v = nil
2913
	case *map[uint64]int:
2914
		*v = nil
2915
	case *map[uint64]int32:
2916
		*v = nil
2917
	case *map[uint64]float64:
2918
		*v = nil
2919
	case *map[uint64]bool:
2920
		*v = nil
2921
	case *map[int]interface{}:
2922
		*v = nil
2923
	case *map[int]string:
2924
		*v = nil
2925
	case *map[int][]byte:
2926
		*v = nil
2927
	case *map[int]uint8:
2928
		*v = nil
2929
	case *map[int]uint64:
2930
		*v = nil
2931
	case *map[int]int:
2932
		*v = nil
2933
	case *map[int]int32:
2934
		*v = nil
2935
	case *map[int]float64:
2936
		*v = nil
2937
	case *map[int]bool:
2938
		*v = nil
2939
	case *map[int32]interface{}:
2940
		*v = nil
2941
	case *map[int32]string:
2942
		*v = nil
2943
	case *map[int32][]byte:
2944
		*v = nil
2945
	case *map[int32]uint8:
2946
		*v = nil
2947
	case *map[int32]uint64:
2948
		*v = nil
2949
	case *map[int32]int:
2950
		*v = nil
2951
	case *map[int32]int32:
2952
		*v = nil
2953
	case *map[int32]float64:
2954
		*v = nil
2955
	case *map[int32]bool:
2956
		*v = nil
2957

2958
	default:
2959
		_ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4
2960
		return false
2961
	}
2962
	return true
2963
}
2964

2965
// -- -- fast path functions
2966

2967
func (d *Decoder) fastpathDecSliceIntfR(f *codecFnInfo, rv reflect.Value) {
2968
	var v []interface{}
2969
	switch rv.Kind() {
2970
	case reflect.Ptr:
2971
		vp := rv2i(rv).(*[]interface{})
2972
		var changed bool
2973
		if v, changed = fastpathTV.DecSliceIntfY(*vp, d); changed {
2974
			*vp = v
2975
		}
2976
	case reflect.Array:
2977
		rvGetSlice4Array(rv, &v)
2978
		fastpathTV.DecSliceIntfN(v, d)
2979
	default:
2980
		fastpathTV.DecSliceIntfN(rv2i(rv).([]interface{}), d)
2981
	}
2982
}
2983
func (f fastpathT) DecSliceIntfX(vp *[]interface{}, d *Decoder) {
2984
	if v, changed := f.DecSliceIntfY(*vp, d); changed {
2985
		*vp = v
2986
	}
2987
}
2988
func (fastpathT) DecSliceIntfY(v []interface{}, d *Decoder) (v2 []interface{}, changed bool) {
2989
	slh, containerLenS := d.decSliceHelperStart()
2990
	if slh.IsNil {
2991
		if v == nil {
2992
			return
2993
		}
2994
		return nil, true
2995
	}
2996
	if containerLenS == 0 {
2997
		if v == nil {
2998
			v = []interface{}{}
2999
		} else if len(v) != 0 {
3000
			v = v[:0]
3001
		}
3002
		slh.End()
3003
		return v, true
3004
	}
3005
	hasLen := containerLenS > 0
3006
	var xlen int
3007
	if hasLen {
3008
		if containerLenS > cap(v) {
3009
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16)
3010
			if xlen <= cap(v) {
3011
				v = v[:uint(xlen)]
3012
			} else {
3013
				v = make([]interface{}, uint(xlen))
3014
			}
3015
			changed = true
3016
		} else if containerLenS != len(v) {
3017
			v = v[:containerLenS]
3018
			changed = true
3019
		}
3020
	}
3021
	var j int
3022
	for j = 0; d.containerNext(j, containerLenS, hasLen); j++ {
3023
		if j == 0 && len(v) == 0 { // means hasLen == false
3024
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16)
3025
			v = make([]interface{}, uint(xlen))
3026
			changed = true
3027
		}
3028
		if j >= len(v) {
3029
			v = append(v, nil)
3030
			changed = true
3031
		}
3032
		slh.ElemContainerState(j)
3033
		d.decode(&v[uint(j)])
3034
	}
3035
	if j < len(v) {
3036
		v = v[:uint(j)]
3037
		changed = true
3038
	} else if j == 0 && v == nil {
3039
		v = []interface{}{}
3040
		changed = true
3041
	}
3042
	slh.End()
3043
	return v, changed
3044
}
3045
func (fastpathT) DecSliceIntfN(v []interface{}, d *Decoder) {
3046
	slh, containerLenS := d.decSliceHelperStart()
3047
	if slh.IsNil {
3048
		return
3049
	}
3050
	if containerLenS == 0 {
3051
		slh.End()
3052
		return
3053
	}
3054
	hasLen := containerLenS > 0
3055
	for j := 0; d.containerNext(j, containerLenS, hasLen); j++ {
3056
		if j >= len(v) {
3057
			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
3058
			return
3059
		}
3060
		slh.ElemContainerState(j)
3061
		d.decode(&v[uint(j)])
3062
	}
3063
	slh.End()
3064
}
3065

3066
func (d *Decoder) fastpathDecSliceStringR(f *codecFnInfo, rv reflect.Value) {
3067
	var v []string
3068
	switch rv.Kind() {
3069
	case reflect.Ptr:
3070
		vp := rv2i(rv).(*[]string)
3071
		var changed bool
3072
		if v, changed = fastpathTV.DecSliceStringY(*vp, d); changed {
3073
			*vp = v
3074
		}
3075
	case reflect.Array:
3076
		rvGetSlice4Array(rv, &v)
3077
		fastpathTV.DecSliceStringN(v, d)
3078
	default:
3079
		fastpathTV.DecSliceStringN(rv2i(rv).([]string), d)
3080
	}
3081
}
3082
func (f fastpathT) DecSliceStringX(vp *[]string, d *Decoder) {
3083
	if v, changed := f.DecSliceStringY(*vp, d); changed {
3084
		*vp = v
3085
	}
3086
}
3087
func (fastpathT) DecSliceStringY(v []string, d *Decoder) (v2 []string, changed bool) {
3088
	slh, containerLenS := d.decSliceHelperStart()
3089
	if slh.IsNil {
3090
		if v == nil {
3091
			return
3092
		}
3093
		return nil, true
3094
	}
3095
	if containerLenS == 0 {
3096
		if v == nil {
3097
			v = []string{}
3098
		} else if len(v) != 0 {
3099
			v = v[:0]
3100
		}
3101
		slh.End()
3102
		return v, true
3103
	}
3104
	hasLen := containerLenS > 0
3105
	var xlen int
3106
	if hasLen {
3107
		if containerLenS > cap(v) {
3108
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16)
3109
			if xlen <= cap(v) {
3110
				v = v[:uint(xlen)]
3111
			} else {
3112
				v = make([]string, uint(xlen))
3113
			}
3114
			changed = true
3115
		} else if containerLenS != len(v) {
3116
			v = v[:containerLenS]
3117
			changed = true
3118
		}
3119
	}
3120
	var j int
3121
	for j = 0; d.containerNext(j, containerLenS, hasLen); j++ {
3122
		if j == 0 && len(v) == 0 { // means hasLen == false
3123
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16)
3124
			v = make([]string, uint(xlen))
3125
			changed = true
3126
		}
3127
		if j >= len(v) {
3128
			v = append(v, "")
3129
			changed = true
3130
		}
3131
		slh.ElemContainerState(j)
3132
		v[uint(j)] = d.stringZC(d.d.DecodeStringAsBytes())
3133
	}
3134
	if j < len(v) {
3135
		v = v[:uint(j)]
3136
		changed = true
3137
	} else if j == 0 && v == nil {
3138
		v = []string{}
3139
		changed = true
3140
	}
3141
	slh.End()
3142
	return v, changed
3143
}
3144
func (fastpathT) DecSliceStringN(v []string, d *Decoder) {
3145
	slh, containerLenS := d.decSliceHelperStart()
3146
	if slh.IsNil {
3147
		return
3148
	}
3149
	if containerLenS == 0 {
3150
		slh.End()
3151
		return
3152
	}
3153
	hasLen := containerLenS > 0
3154
	for j := 0; d.containerNext(j, containerLenS, hasLen); j++ {
3155
		if j >= len(v) {
3156
			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
3157
			return
3158
		}
3159
		slh.ElemContainerState(j)
3160
		v[uint(j)] = d.stringZC(d.d.DecodeStringAsBytes())
3161
	}
3162
	slh.End()
3163
}
3164

3165
func (d *Decoder) fastpathDecSliceBytesR(f *codecFnInfo, rv reflect.Value) {
3166
	var v [][]byte
3167
	switch rv.Kind() {
3168
	case reflect.Ptr:
3169
		vp := rv2i(rv).(*[][]byte)
3170
		var changed bool
3171
		if v, changed = fastpathTV.DecSliceBytesY(*vp, d); changed {
3172
			*vp = v
3173
		}
3174
	case reflect.Array:
3175
		rvGetSlice4Array(rv, &v)
3176
		fastpathTV.DecSliceBytesN(v, d)
3177
	default:
3178
		fastpathTV.DecSliceBytesN(rv2i(rv).([][]byte), d)
3179
	}
3180
}
3181
func (f fastpathT) DecSliceBytesX(vp *[][]byte, d *Decoder) {
3182
	if v, changed := f.DecSliceBytesY(*vp, d); changed {
3183
		*vp = v
3184
	}
3185
}
3186
func (fastpathT) DecSliceBytesY(v [][]byte, d *Decoder) (v2 [][]byte, changed bool) {
3187
	slh, containerLenS := d.decSliceHelperStart()
3188
	if slh.IsNil {
3189
		if v == nil {
3190
			return
3191
		}
3192
		return nil, true
3193
	}
3194
	if containerLenS == 0 {
3195
		if v == nil {
3196
			v = [][]byte{}
3197
		} else if len(v) != 0 {
3198
			v = v[:0]
3199
		}
3200
		slh.End()
3201
		return v, true
3202
	}
3203
	hasLen := containerLenS > 0
3204
	var xlen int
3205
	if hasLen {
3206
		if containerLenS > cap(v) {
3207
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 24)
3208
			if xlen <= cap(v) {
3209
				v = v[:uint(xlen)]
3210
			} else {
3211
				v = make([][]byte, uint(xlen))
3212
			}
3213
			changed = true
3214
		} else if containerLenS != len(v) {
3215
			v = v[:containerLenS]
3216
			changed = true
3217
		}
3218
	}
3219
	var j int
3220
	for j = 0; d.containerNext(j, containerLenS, hasLen); j++ {
3221
		if j == 0 && len(v) == 0 { // means hasLen == false
3222
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 24)
3223
			v = make([][]byte, uint(xlen))
3224
			changed = true
3225
		}
3226
		if j >= len(v) {
3227
			v = append(v, nil)
3228
			changed = true
3229
		}
3230
		slh.ElemContainerState(j)
3231
		v[uint(j)] = d.d.DecodeBytes([]byte{})
3232
	}
3233
	if j < len(v) {
3234
		v = v[:uint(j)]
3235
		changed = true
3236
	} else if j == 0 && v == nil {
3237
		v = [][]byte{}
3238
		changed = true
3239
	}
3240
	slh.End()
3241
	return v, changed
3242
}
3243
func (fastpathT) DecSliceBytesN(v [][]byte, d *Decoder) {
3244
	slh, containerLenS := d.decSliceHelperStart()
3245
	if slh.IsNil {
3246
		return
3247
	}
3248
	if containerLenS == 0 {
3249
		slh.End()
3250
		return
3251
	}
3252
	hasLen := containerLenS > 0
3253
	for j := 0; d.containerNext(j, containerLenS, hasLen); j++ {
3254
		if j >= len(v) {
3255
			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
3256
			return
3257
		}
3258
		slh.ElemContainerState(j)
3259
		v[uint(j)] = d.d.DecodeBytes([]byte{})
3260
	}
3261
	slh.End()
3262
}
3263

3264
func (d *Decoder) fastpathDecSliceFloat32R(f *codecFnInfo, rv reflect.Value) {
3265
	var v []float32
3266
	switch rv.Kind() {
3267
	case reflect.Ptr:
3268
		vp := rv2i(rv).(*[]float32)
3269
		var changed bool
3270
		if v, changed = fastpathTV.DecSliceFloat32Y(*vp, d); changed {
3271
			*vp = v
3272
		}
3273
	case reflect.Array:
3274
		rvGetSlice4Array(rv, &v)
3275
		fastpathTV.DecSliceFloat32N(v, d)
3276
	default:
3277
		fastpathTV.DecSliceFloat32N(rv2i(rv).([]float32), d)
3278
	}
3279
}
3280
func (f fastpathT) DecSliceFloat32X(vp *[]float32, d *Decoder) {
3281
	if v, changed := f.DecSliceFloat32Y(*vp, d); changed {
3282
		*vp = v
3283
	}
3284
}
3285
func (fastpathT) DecSliceFloat32Y(v []float32, d *Decoder) (v2 []float32, changed bool) {
3286
	slh, containerLenS := d.decSliceHelperStart()
3287
	if slh.IsNil {
3288
		if v == nil {
3289
			return
3290
		}
3291
		return nil, true
3292
	}
3293
	if containerLenS == 0 {
3294
		if v == nil {
3295
			v = []float32{}
3296
		} else if len(v) != 0 {
3297
			v = v[:0]
3298
		}
3299
		slh.End()
3300
		return v, true
3301
	}
3302
	hasLen := containerLenS > 0
3303
	var xlen int
3304
	if hasLen {
3305
		if containerLenS > cap(v) {
3306
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4)
3307
			if xlen <= cap(v) {
3308
				v = v[:uint(xlen)]
3309
			} else {
3310
				v = make([]float32, uint(xlen))
3311
			}
3312
			changed = true
3313
		} else if containerLenS != len(v) {
3314
			v = v[:containerLenS]
3315
			changed = true
3316
		}
3317
	}
3318
	var j int
3319
	for j = 0; d.containerNext(j, containerLenS, hasLen); j++ {
3320
		if j == 0 && len(v) == 0 { // means hasLen == false
3321
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4)
3322
			v = make([]float32, uint(xlen))
3323
			changed = true
3324
		}
3325
		if j >= len(v) {
3326
			v = append(v, 0)
3327
			changed = true
3328
		}
3329
		slh.ElemContainerState(j)
3330
		v[uint(j)] = float32(d.decodeFloat32())
3331
	}
3332
	if j < len(v) {
3333
		v = v[:uint(j)]
3334
		changed = true
3335
	} else if j == 0 && v == nil {
3336
		v = []float32{}
3337
		changed = true
3338
	}
3339
	slh.End()
3340
	return v, changed
3341
}
3342
func (fastpathT) DecSliceFloat32N(v []float32, d *Decoder) {
3343
	slh, containerLenS := d.decSliceHelperStart()
3344
	if slh.IsNil {
3345
		return
3346
	}
3347
	if containerLenS == 0 {
3348
		slh.End()
3349
		return
3350
	}
3351
	hasLen := containerLenS > 0
3352
	for j := 0; d.containerNext(j, containerLenS, hasLen); j++ {
3353
		if j >= len(v) {
3354
			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
3355
			return
3356
		}
3357
		slh.ElemContainerState(j)
3358
		v[uint(j)] = float32(d.decodeFloat32())
3359
	}
3360
	slh.End()
3361
}
3362

3363
func (d *Decoder) fastpathDecSliceFloat64R(f *codecFnInfo, rv reflect.Value) {
3364
	var v []float64
3365
	switch rv.Kind() {
3366
	case reflect.Ptr:
3367
		vp := rv2i(rv).(*[]float64)
3368
		var changed bool
3369
		if v, changed = fastpathTV.DecSliceFloat64Y(*vp, d); changed {
3370
			*vp = v
3371
		}
3372
	case reflect.Array:
3373
		rvGetSlice4Array(rv, &v)
3374
		fastpathTV.DecSliceFloat64N(v, d)
3375
	default:
3376
		fastpathTV.DecSliceFloat64N(rv2i(rv).([]float64), d)
3377
	}
3378
}
3379
func (f fastpathT) DecSliceFloat64X(vp *[]float64, d *Decoder) {
3380
	if v, changed := f.DecSliceFloat64Y(*vp, d); changed {
3381
		*vp = v
3382
	}
3383
}
3384
func (fastpathT) DecSliceFloat64Y(v []float64, d *Decoder) (v2 []float64, changed bool) {
3385
	slh, containerLenS := d.decSliceHelperStart()
3386
	if slh.IsNil {
3387
		if v == nil {
3388
			return
3389
		}
3390
		return nil, true
3391
	}
3392
	if containerLenS == 0 {
3393
		if v == nil {
3394
			v = []float64{}
3395
		} else if len(v) != 0 {
3396
			v = v[:0]
3397
		}
3398
		slh.End()
3399
		return v, true
3400
	}
3401
	hasLen := containerLenS > 0
3402
	var xlen int
3403
	if hasLen {
3404
		if containerLenS > cap(v) {
3405
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
3406
			if xlen <= cap(v) {
3407
				v = v[:uint(xlen)]
3408
			} else {
3409
				v = make([]float64, uint(xlen))
3410
			}
3411
			changed = true
3412
		} else if containerLenS != len(v) {
3413
			v = v[:containerLenS]
3414
			changed = true
3415
		}
3416
	}
3417
	var j int
3418
	for j = 0; d.containerNext(j, containerLenS, hasLen); j++ {
3419
		if j == 0 && len(v) == 0 { // means hasLen == false
3420
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
3421
			v = make([]float64, uint(xlen))
3422
			changed = true
3423
		}
3424
		if j >= len(v) {
3425
			v = append(v, 0)
3426
			changed = true
3427
		}
3428
		slh.ElemContainerState(j)
3429
		v[uint(j)] = d.d.DecodeFloat64()
3430
	}
3431
	if j < len(v) {
3432
		v = v[:uint(j)]
3433
		changed = true
3434
	} else if j == 0 && v == nil {
3435
		v = []float64{}
3436
		changed = true
3437
	}
3438
	slh.End()
3439
	return v, changed
3440
}
3441
func (fastpathT) DecSliceFloat64N(v []float64, d *Decoder) {
3442
	slh, containerLenS := d.decSliceHelperStart()
3443
	if slh.IsNil {
3444
		return
3445
	}
3446
	if containerLenS == 0 {
3447
		slh.End()
3448
		return
3449
	}
3450
	hasLen := containerLenS > 0
3451
	for j := 0; d.containerNext(j, containerLenS, hasLen); j++ {
3452
		if j >= len(v) {
3453
			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
3454
			return
3455
		}
3456
		slh.ElemContainerState(j)
3457
		v[uint(j)] = d.d.DecodeFloat64()
3458
	}
3459
	slh.End()
3460
}
3461

3462
func (d *Decoder) fastpathDecSliceUint8R(f *codecFnInfo, rv reflect.Value) {
3463
	var v []uint8
3464
	switch rv.Kind() {
3465
	case reflect.Ptr:
3466
		vp := rv2i(rv).(*[]uint8)
3467
		var changed bool
3468
		if v, changed = fastpathTV.DecSliceUint8Y(*vp, d); changed {
3469
			*vp = v
3470
		}
3471
	case reflect.Array:
3472
		rvGetSlice4Array(rv, &v)
3473
		fastpathTV.DecSliceUint8N(v, d)
3474
	default:
3475
		fastpathTV.DecSliceUint8N(rv2i(rv).([]uint8), d)
3476
	}
3477
}
3478
func (f fastpathT) DecSliceUint8X(vp *[]uint8, d *Decoder) {
3479
	if v, changed := f.DecSliceUint8Y(*vp, d); changed {
3480
		*vp = v
3481
	}
3482
}
3483
func (fastpathT) DecSliceUint8Y(v []uint8, d *Decoder) (v2 []uint8, changed bool) {
3484
	switch d.d.ContainerType() {
3485
	case valueTypeNil, valueTypeMap:
3486
		break
3487
	default:
3488
		v2 = d.decodeBytesInto(v[:len(v):len(v)])
3489
		changed = !(len(v2) > 0 && len(v2) == len(v) && &v2[0] == &v[0]) // not same slice
3490
		return
3491
	}
3492
	slh, containerLenS := d.decSliceHelperStart()
3493
	if slh.IsNil {
3494
		if v == nil {
3495
			return
3496
		}
3497
		return nil, true
3498
	}
3499
	if containerLenS == 0 {
3500
		if v == nil {
3501
			v = []uint8{}
3502
		} else if len(v) != 0 {
3503
			v = v[:0]
3504
		}
3505
		slh.End()
3506
		return v, true
3507
	}
3508
	hasLen := containerLenS > 0
3509
	var xlen int
3510
	if hasLen {
3511
		if containerLenS > cap(v) {
3512
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1)
3513
			if xlen <= cap(v) {
3514
				v = v[:uint(xlen)]
3515
			} else {
3516
				v = make([]uint8, uint(xlen))
3517
			}
3518
			changed = true
3519
		} else if containerLenS != len(v) {
3520
			v = v[:containerLenS]
3521
			changed = true
3522
		}
3523
	}
3524
	var j int
3525
	for j = 0; d.containerNext(j, containerLenS, hasLen); j++ {
3526
		if j == 0 && len(v) == 0 { // means hasLen == false
3527
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1)
3528
			v = make([]uint8, uint(xlen))
3529
			changed = true
3530
		}
3531
		if j >= len(v) {
3532
			v = append(v, 0)
3533
			changed = true
3534
		}
3535
		slh.ElemContainerState(j)
3536
		v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
3537
	}
3538
	if j < len(v) {
3539
		v = v[:uint(j)]
3540
		changed = true
3541
	} else if j == 0 && v == nil {
3542
		v = []uint8{}
3543
		changed = true
3544
	}
3545
	slh.End()
3546
	return v, changed
3547
}
3548
func (fastpathT) DecSliceUint8N(v []uint8, d *Decoder) {
3549
	switch d.d.ContainerType() {
3550
	case valueTypeNil, valueTypeMap:
3551
		break
3552
	default:
3553
		v2 := d.decodeBytesInto(v[:len(v):len(v)])
3554
		if !(len(v2) > 0 && len(v2) == len(v) && &v2[0] == &v[0]) { // not same slice
3555
			copy(v, v2)
3556
		}
3557
		return
3558
	}
3559
	slh, containerLenS := d.decSliceHelperStart()
3560
	if slh.IsNil {
3561
		return
3562
	}
3563
	if containerLenS == 0 {
3564
		slh.End()
3565
		return
3566
	}
3567
	hasLen := containerLenS > 0
3568
	for j := 0; d.containerNext(j, containerLenS, hasLen); j++ {
3569
		if j >= len(v) {
3570
			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
3571
			return
3572
		}
3573
		slh.ElemContainerState(j)
3574
		v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
3575
	}
3576
	slh.End()
3577
}
3578

3579
func (d *Decoder) fastpathDecSliceUint64R(f *codecFnInfo, rv reflect.Value) {
3580
	var v []uint64
3581
	switch rv.Kind() {
3582
	case reflect.Ptr:
3583
		vp := rv2i(rv).(*[]uint64)
3584
		var changed bool
3585
		if v, changed = fastpathTV.DecSliceUint64Y(*vp, d); changed {
3586
			*vp = v
3587
		}
3588
	case reflect.Array:
3589
		rvGetSlice4Array(rv, &v)
3590
		fastpathTV.DecSliceUint64N(v, d)
3591
	default:
3592
		fastpathTV.DecSliceUint64N(rv2i(rv).([]uint64), d)
3593
	}
3594
}
3595
func (f fastpathT) DecSliceUint64X(vp *[]uint64, d *Decoder) {
3596
	if v, changed := f.DecSliceUint64Y(*vp, d); changed {
3597
		*vp = v
3598
	}
3599
}
3600
func (fastpathT) DecSliceUint64Y(v []uint64, d *Decoder) (v2 []uint64, changed bool) {
3601
	slh, containerLenS := d.decSliceHelperStart()
3602
	if slh.IsNil {
3603
		if v == nil {
3604
			return
3605
		}
3606
		return nil, true
3607
	}
3608
	if containerLenS == 0 {
3609
		if v == nil {
3610
			v = []uint64{}
3611
		} else if len(v) != 0 {
3612
			v = v[:0]
3613
		}
3614
		slh.End()
3615
		return v, true
3616
	}
3617
	hasLen := containerLenS > 0
3618
	var xlen int
3619
	if hasLen {
3620
		if containerLenS > cap(v) {
3621
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
3622
			if xlen <= cap(v) {
3623
				v = v[:uint(xlen)]
3624
			} else {
3625
				v = make([]uint64, uint(xlen))
3626
			}
3627
			changed = true
3628
		} else if containerLenS != len(v) {
3629
			v = v[:containerLenS]
3630
			changed = true
3631
		}
3632
	}
3633
	var j int
3634
	for j = 0; d.containerNext(j, containerLenS, hasLen); j++ {
3635
		if j == 0 && len(v) == 0 { // means hasLen == false
3636
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
3637
			v = make([]uint64, uint(xlen))
3638
			changed = true
3639
		}
3640
		if j >= len(v) {
3641
			v = append(v, 0)
3642
			changed = true
3643
		}
3644
		slh.ElemContainerState(j)
3645
		v[uint(j)] = d.d.DecodeUint64()
3646
	}
3647
	if j < len(v) {
3648
		v = v[:uint(j)]
3649
		changed = true
3650
	} else if j == 0 && v == nil {
3651
		v = []uint64{}
3652
		changed = true
3653
	}
3654
	slh.End()
3655
	return v, changed
3656
}
3657
func (fastpathT) DecSliceUint64N(v []uint64, d *Decoder) {
3658
	slh, containerLenS := d.decSliceHelperStart()
3659
	if slh.IsNil {
3660
		return
3661
	}
3662
	if containerLenS == 0 {
3663
		slh.End()
3664
		return
3665
	}
3666
	hasLen := containerLenS > 0
3667
	for j := 0; d.containerNext(j, containerLenS, hasLen); j++ {
3668
		if j >= len(v) {
3669
			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
3670
			return
3671
		}
3672
		slh.ElemContainerState(j)
3673
		v[uint(j)] = d.d.DecodeUint64()
3674
	}
3675
	slh.End()
3676
}
3677

3678
func (d *Decoder) fastpathDecSliceIntR(f *codecFnInfo, rv reflect.Value) {
3679
	var v []int
3680
	switch rv.Kind() {
3681
	case reflect.Ptr:
3682
		vp := rv2i(rv).(*[]int)
3683
		var changed bool
3684
		if v, changed = fastpathTV.DecSliceIntY(*vp, d); changed {
3685
			*vp = v
3686
		}
3687
	case reflect.Array:
3688
		rvGetSlice4Array(rv, &v)
3689
		fastpathTV.DecSliceIntN(v, d)
3690
	default:
3691
		fastpathTV.DecSliceIntN(rv2i(rv).([]int), d)
3692
	}
3693
}
3694
func (f fastpathT) DecSliceIntX(vp *[]int, d *Decoder) {
3695
	if v, changed := f.DecSliceIntY(*vp, d); changed {
3696
		*vp = v
3697
	}
3698
}
3699
func (fastpathT) DecSliceIntY(v []int, d *Decoder) (v2 []int, changed bool) {
3700
	slh, containerLenS := d.decSliceHelperStart()
3701
	if slh.IsNil {
3702
		if v == nil {
3703
			return
3704
		}
3705
		return nil, true
3706
	}
3707
	if containerLenS == 0 {
3708
		if v == nil {
3709
			v = []int{}
3710
		} else if len(v) != 0 {
3711
			v = v[:0]
3712
		}
3713
		slh.End()
3714
		return v, true
3715
	}
3716
	hasLen := containerLenS > 0
3717
	var xlen int
3718
	if hasLen {
3719
		if containerLenS > cap(v) {
3720
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
3721
			if xlen <= cap(v) {
3722
				v = v[:uint(xlen)]
3723
			} else {
3724
				v = make([]int, uint(xlen))
3725
			}
3726
			changed = true
3727
		} else if containerLenS != len(v) {
3728
			v = v[:containerLenS]
3729
			changed = true
3730
		}
3731
	}
3732
	var j int
3733
	for j = 0; d.containerNext(j, containerLenS, hasLen); j++ {
3734
		if j == 0 && len(v) == 0 { // means hasLen == false
3735
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
3736
			v = make([]int, uint(xlen))
3737
			changed = true
3738
		}
3739
		if j >= len(v) {
3740
			v = append(v, 0)
3741
			changed = true
3742
		}
3743
		slh.ElemContainerState(j)
3744
		v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
3745
	}
3746
	if j < len(v) {
3747
		v = v[:uint(j)]
3748
		changed = true
3749
	} else if j == 0 && v == nil {
3750
		v = []int{}
3751
		changed = true
3752
	}
3753
	slh.End()
3754
	return v, changed
3755
}
3756
func (fastpathT) DecSliceIntN(v []int, d *Decoder) {
3757
	slh, containerLenS := d.decSliceHelperStart()
3758
	if slh.IsNil {
3759
		return
3760
	}
3761
	if containerLenS == 0 {
3762
		slh.End()
3763
		return
3764
	}
3765
	hasLen := containerLenS > 0
3766
	for j := 0; d.containerNext(j, containerLenS, hasLen); j++ {
3767
		if j >= len(v) {
3768
			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
3769
			return
3770
		}
3771
		slh.ElemContainerState(j)
3772
		v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
3773
	}
3774
	slh.End()
3775
}
3776

3777
func (d *Decoder) fastpathDecSliceInt32R(f *codecFnInfo, rv reflect.Value) {
3778
	var v []int32
3779
	switch rv.Kind() {
3780
	case reflect.Ptr:
3781
		vp := rv2i(rv).(*[]int32)
3782
		var changed bool
3783
		if v, changed = fastpathTV.DecSliceInt32Y(*vp, d); changed {
3784
			*vp = v
3785
		}
3786
	case reflect.Array:
3787
		rvGetSlice4Array(rv, &v)
3788
		fastpathTV.DecSliceInt32N(v, d)
3789
	default:
3790
		fastpathTV.DecSliceInt32N(rv2i(rv).([]int32), d)
3791
	}
3792
}
3793
func (f fastpathT) DecSliceInt32X(vp *[]int32, d *Decoder) {
3794
	if v, changed := f.DecSliceInt32Y(*vp, d); changed {
3795
		*vp = v
3796
	}
3797
}
3798
func (fastpathT) DecSliceInt32Y(v []int32, d *Decoder) (v2 []int32, changed bool) {
3799
	slh, containerLenS := d.decSliceHelperStart()
3800
	if slh.IsNil {
3801
		if v == nil {
3802
			return
3803
		}
3804
		return nil, true
3805
	}
3806
	if containerLenS == 0 {
3807
		if v == nil {
3808
			v = []int32{}
3809
		} else if len(v) != 0 {
3810
			v = v[:0]
3811
		}
3812
		slh.End()
3813
		return v, true
3814
	}
3815
	hasLen := containerLenS > 0
3816
	var xlen int
3817
	if hasLen {
3818
		if containerLenS > cap(v) {
3819
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4)
3820
			if xlen <= cap(v) {
3821
				v = v[:uint(xlen)]
3822
			} else {
3823
				v = make([]int32, uint(xlen))
3824
			}
3825
			changed = true
3826
		} else if containerLenS != len(v) {
3827
			v = v[:containerLenS]
3828
			changed = true
3829
		}
3830
	}
3831
	var j int
3832
	for j = 0; d.containerNext(j, containerLenS, hasLen); j++ {
3833
		if j == 0 && len(v) == 0 { // means hasLen == false
3834
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4)
3835
			v = make([]int32, uint(xlen))
3836
			changed = true
3837
		}
3838
		if j >= len(v) {
3839
			v = append(v, 0)
3840
			changed = true
3841
		}
3842
		slh.ElemContainerState(j)
3843
		v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
3844
	}
3845
	if j < len(v) {
3846
		v = v[:uint(j)]
3847
		changed = true
3848
	} else if j == 0 && v == nil {
3849
		v = []int32{}
3850
		changed = true
3851
	}
3852
	slh.End()
3853
	return v, changed
3854
}
3855
func (fastpathT) DecSliceInt32N(v []int32, d *Decoder) {
3856
	slh, containerLenS := d.decSliceHelperStart()
3857
	if slh.IsNil {
3858
		return
3859
	}
3860
	if containerLenS == 0 {
3861
		slh.End()
3862
		return
3863
	}
3864
	hasLen := containerLenS > 0
3865
	for j := 0; d.containerNext(j, containerLenS, hasLen); j++ {
3866
		if j >= len(v) {
3867
			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
3868
			return
3869
		}
3870
		slh.ElemContainerState(j)
3871
		v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
3872
	}
3873
	slh.End()
3874
}
3875

3876
func (d *Decoder) fastpathDecSliceInt64R(f *codecFnInfo, rv reflect.Value) {
3877
	var v []int64
3878
	switch rv.Kind() {
3879
	case reflect.Ptr:
3880
		vp := rv2i(rv).(*[]int64)
3881
		var changed bool
3882
		if v, changed = fastpathTV.DecSliceInt64Y(*vp, d); changed {
3883
			*vp = v
3884
		}
3885
	case reflect.Array:
3886
		rvGetSlice4Array(rv, &v)
3887
		fastpathTV.DecSliceInt64N(v, d)
3888
	default:
3889
		fastpathTV.DecSliceInt64N(rv2i(rv).([]int64), d)
3890
	}
3891
}
3892
func (f fastpathT) DecSliceInt64X(vp *[]int64, d *Decoder) {
3893
	if v, changed := f.DecSliceInt64Y(*vp, d); changed {
3894
		*vp = v
3895
	}
3896
}
3897
func (fastpathT) DecSliceInt64Y(v []int64, d *Decoder) (v2 []int64, changed bool) {
3898
	slh, containerLenS := d.decSliceHelperStart()
3899
	if slh.IsNil {
3900
		if v == nil {
3901
			return
3902
		}
3903
		return nil, true
3904
	}
3905
	if containerLenS == 0 {
3906
		if v == nil {
3907
			v = []int64{}
3908
		} else if len(v) != 0 {
3909
			v = v[:0]
3910
		}
3911
		slh.End()
3912
		return v, true
3913
	}
3914
	hasLen := containerLenS > 0
3915
	var xlen int
3916
	if hasLen {
3917
		if containerLenS > cap(v) {
3918
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
3919
			if xlen <= cap(v) {
3920
				v = v[:uint(xlen)]
3921
			} else {
3922
				v = make([]int64, uint(xlen))
3923
			}
3924
			changed = true
3925
		} else if containerLenS != len(v) {
3926
			v = v[:containerLenS]
3927
			changed = true
3928
		}
3929
	}
3930
	var j int
3931
	for j = 0; d.containerNext(j, containerLenS, hasLen); j++ {
3932
		if j == 0 && len(v) == 0 { // means hasLen == false
3933
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
3934
			v = make([]int64, uint(xlen))
3935
			changed = true
3936
		}
3937
		if j >= len(v) {
3938
			v = append(v, 0)
3939
			changed = true
3940
		}
3941
		slh.ElemContainerState(j)
3942
		v[uint(j)] = d.d.DecodeInt64()
3943
	}
3944
	if j < len(v) {
3945
		v = v[:uint(j)]
3946
		changed = true
3947
	} else if j == 0 && v == nil {
3948
		v = []int64{}
3949
		changed = true
3950
	}
3951
	slh.End()
3952
	return v, changed
3953
}
3954
func (fastpathT) DecSliceInt64N(v []int64, d *Decoder) {
3955
	slh, containerLenS := d.decSliceHelperStart()
3956
	if slh.IsNil {
3957
		return
3958
	}
3959
	if containerLenS == 0 {
3960
		slh.End()
3961
		return
3962
	}
3963
	hasLen := containerLenS > 0
3964
	for j := 0; d.containerNext(j, containerLenS, hasLen); j++ {
3965
		if j >= len(v) {
3966
			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
3967
			return
3968
		}
3969
		slh.ElemContainerState(j)
3970
		v[uint(j)] = d.d.DecodeInt64()
3971
	}
3972
	slh.End()
3973
}
3974

3975
func (d *Decoder) fastpathDecSliceBoolR(f *codecFnInfo, rv reflect.Value) {
3976
	var v []bool
3977
	switch rv.Kind() {
3978
	case reflect.Ptr:
3979
		vp := rv2i(rv).(*[]bool)
3980
		var changed bool
3981
		if v, changed = fastpathTV.DecSliceBoolY(*vp, d); changed {
3982
			*vp = v
3983
		}
3984
	case reflect.Array:
3985
		rvGetSlice4Array(rv, &v)
3986
		fastpathTV.DecSliceBoolN(v, d)
3987
	default:
3988
		fastpathTV.DecSliceBoolN(rv2i(rv).([]bool), d)
3989
	}
3990
}
3991
func (f fastpathT) DecSliceBoolX(vp *[]bool, d *Decoder) {
3992
	if v, changed := f.DecSliceBoolY(*vp, d); changed {
3993
		*vp = v
3994
	}
3995
}
3996
func (fastpathT) DecSliceBoolY(v []bool, d *Decoder) (v2 []bool, changed bool) {
3997
	slh, containerLenS := d.decSliceHelperStart()
3998
	if slh.IsNil {
3999
		if v == nil {
4000
			return
4001
		}
4002
		return nil, true
4003
	}
4004
	if containerLenS == 0 {
4005
		if v == nil {
4006
			v = []bool{}
4007
		} else if len(v) != 0 {
4008
			v = v[:0]
4009
		}
4010
		slh.End()
4011
		return v, true
4012
	}
4013
	hasLen := containerLenS > 0
4014
	var xlen int
4015
	if hasLen {
4016
		if containerLenS > cap(v) {
4017
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1)
4018
			if xlen <= cap(v) {
4019
				v = v[:uint(xlen)]
4020
			} else {
4021
				v = make([]bool, uint(xlen))
4022
			}
4023
			changed = true
4024
		} else if containerLenS != len(v) {
4025
			v = v[:containerLenS]
4026
			changed = true
4027
		}
4028
	}
4029
	var j int
4030
	for j = 0; d.containerNext(j, containerLenS, hasLen); j++ {
4031
		if j == 0 && len(v) == 0 { // means hasLen == false
4032
			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1)
4033
			v = make([]bool, uint(xlen))
4034
			changed = true
4035
		}
4036
		if j >= len(v) {
4037
			v = append(v, false)
4038
			changed = true
4039
		}
4040
		slh.ElemContainerState(j)
4041
		v[uint(j)] = d.d.DecodeBool()
4042
	}
4043
	if j < len(v) {
4044
		v = v[:uint(j)]
4045
		changed = true
4046
	} else if j == 0 && v == nil {
4047
		v = []bool{}
4048
		changed = true
4049
	}
4050
	slh.End()
4051
	return v, changed
4052
}
4053
func (fastpathT) DecSliceBoolN(v []bool, d *Decoder) {
4054
	slh, containerLenS := d.decSliceHelperStart()
4055
	if slh.IsNil {
4056
		return
4057
	}
4058
	if containerLenS == 0 {
4059
		slh.End()
4060
		return
4061
	}
4062
	hasLen := containerLenS > 0
4063
	for j := 0; d.containerNext(j, containerLenS, hasLen); j++ {
4064
		if j >= len(v) {
4065
			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
4066
			return
4067
		}
4068
		slh.ElemContainerState(j)
4069
		v[uint(j)] = d.d.DecodeBool()
4070
	}
4071
	slh.End()
4072
}
4073
func (d *Decoder) fastpathDecMapStringIntfR(f *codecFnInfo, rv reflect.Value) {
4074
	containerLen := d.mapStart(d.d.ReadMapStart())
4075
	if rv.Kind() == reflect.Ptr {
4076
		vp, _ := rv2i(rv).(*map[string]interface{})
4077
		if *vp == nil {
4078
			*vp = make(map[string]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 32))
4079
		}
4080
		if containerLen != 0 {
4081
			fastpathTV.DecMapStringIntfL(*vp, containerLen, d)
4082
		}
4083
	} else if containerLen != 0 {
4084
		fastpathTV.DecMapStringIntfL(rv2i(rv).(map[string]interface{}), containerLen, d)
4085
	}
4086
	d.mapEnd()
4087
}
4088
func (f fastpathT) DecMapStringIntfX(vp *map[string]interface{}, d *Decoder) {
4089
	containerLen := d.mapStart(d.d.ReadMapStart())
4090
	if containerLen == containerLenNil {
4091
		*vp = nil
4092
	} else {
4093
		if *vp == nil {
4094
			*vp = make(map[string]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 32))
4095
		}
4096
		if containerLen != 0 {
4097
			f.DecMapStringIntfL(*vp, containerLen, d)
4098
		}
4099
		d.mapEnd()
4100
	}
4101
}
4102
func (fastpathT) DecMapStringIntfL(v map[string]interface{}, containerLen int, d *Decoder) {
4103
	if v == nil {
4104
		d.errorf("cannot decode into nil map[string]interface{} given stream length: %v", containerLen)
4105
		return
4106
	}
4107
	mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset
4108
	var mk string
4109
	var mv interface{}
4110
	hasLen := containerLen > 0
4111
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4112
		d.mapElemKey()
4113
		mk = d.stringZC(d.d.DecodeStringAsBytes())
4114
		d.mapElemValue()
4115
		if mapGet {
4116
			mv = v[mk]
4117
		} else {
4118
			mv = nil
4119
		}
4120
		d.decode(&mv)
4121
		v[mk] = mv
4122
	}
4123
}
4124
func (d *Decoder) fastpathDecMapStringStringR(f *codecFnInfo, rv reflect.Value) {
4125
	containerLen := d.mapStart(d.d.ReadMapStart())
4126
	if rv.Kind() == reflect.Ptr {
4127
		vp, _ := rv2i(rv).(*map[string]string)
4128
		if *vp == nil {
4129
			*vp = make(map[string]string, decInferLen(containerLen, d.h.MaxInitLen, 32))
4130
		}
4131
		if containerLen != 0 {
4132
			fastpathTV.DecMapStringStringL(*vp, containerLen, d)
4133
		}
4134
	} else if containerLen != 0 {
4135
		fastpathTV.DecMapStringStringL(rv2i(rv).(map[string]string), containerLen, d)
4136
	}
4137
	d.mapEnd()
4138
}
4139
func (f fastpathT) DecMapStringStringX(vp *map[string]string, d *Decoder) {
4140
	containerLen := d.mapStart(d.d.ReadMapStart())
4141
	if containerLen == containerLenNil {
4142
		*vp = nil
4143
	} else {
4144
		if *vp == nil {
4145
			*vp = make(map[string]string, decInferLen(containerLen, d.h.MaxInitLen, 32))
4146
		}
4147
		if containerLen != 0 {
4148
			f.DecMapStringStringL(*vp, containerLen, d)
4149
		}
4150
		d.mapEnd()
4151
	}
4152
}
4153
func (fastpathT) DecMapStringStringL(v map[string]string, containerLen int, d *Decoder) {
4154
	if v == nil {
4155
		d.errorf("cannot decode into nil map[string]string given stream length: %v", containerLen)
4156
		return
4157
	}
4158
	var mk string
4159
	var mv string
4160
	hasLen := containerLen > 0
4161
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4162
		d.mapElemKey()
4163
		mk = d.stringZC(d.d.DecodeStringAsBytes())
4164
		d.mapElemValue()
4165
		mv = d.stringZC(d.d.DecodeStringAsBytes())
4166
		v[mk] = mv
4167
	}
4168
}
4169
func (d *Decoder) fastpathDecMapStringBytesR(f *codecFnInfo, rv reflect.Value) {
4170
	containerLen := d.mapStart(d.d.ReadMapStart())
4171
	if rv.Kind() == reflect.Ptr {
4172
		vp, _ := rv2i(rv).(*map[string][]byte)
4173
		if *vp == nil {
4174
			*vp = make(map[string][]byte, decInferLen(containerLen, d.h.MaxInitLen, 40))
4175
		}
4176
		if containerLen != 0 {
4177
			fastpathTV.DecMapStringBytesL(*vp, containerLen, d)
4178
		}
4179
	} else if containerLen != 0 {
4180
		fastpathTV.DecMapStringBytesL(rv2i(rv).(map[string][]byte), containerLen, d)
4181
	}
4182
	d.mapEnd()
4183
}
4184
func (f fastpathT) DecMapStringBytesX(vp *map[string][]byte, d *Decoder) {
4185
	containerLen := d.mapStart(d.d.ReadMapStart())
4186
	if containerLen == containerLenNil {
4187
		*vp = nil
4188
	} else {
4189
		if *vp == nil {
4190
			*vp = make(map[string][]byte, decInferLen(containerLen, d.h.MaxInitLen, 40))
4191
		}
4192
		if containerLen != 0 {
4193
			f.DecMapStringBytesL(*vp, containerLen, d)
4194
		}
4195
		d.mapEnd()
4196
	}
4197
}
4198
func (fastpathT) DecMapStringBytesL(v map[string][]byte, containerLen int, d *Decoder) {
4199
	if v == nil {
4200
		d.errorf("cannot decode into nil map[string][]byte given stream length: %v", containerLen)
4201
		return
4202
	}
4203
	mapGet := v != nil && !d.h.MapValueReset
4204
	var mk string
4205
	var mv []byte
4206
	hasLen := containerLen > 0
4207
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4208
		d.mapElemKey()
4209
		mk = d.stringZC(d.d.DecodeStringAsBytes())
4210
		d.mapElemValue()
4211
		if mapGet {
4212
			mv = v[mk]
4213
		} else {
4214
			mv = nil
4215
		}
4216
		mv = d.decodeBytesInto(mv)
4217
		v[mk] = mv
4218
	}
4219
}
4220
func (d *Decoder) fastpathDecMapStringUint8R(f *codecFnInfo, rv reflect.Value) {
4221
	containerLen := d.mapStart(d.d.ReadMapStart())
4222
	if rv.Kind() == reflect.Ptr {
4223
		vp, _ := rv2i(rv).(*map[string]uint8)
4224
		if *vp == nil {
4225
			*vp = make(map[string]uint8, decInferLen(containerLen, d.h.MaxInitLen, 17))
4226
		}
4227
		if containerLen != 0 {
4228
			fastpathTV.DecMapStringUint8L(*vp, containerLen, d)
4229
		}
4230
	} else if containerLen != 0 {
4231
		fastpathTV.DecMapStringUint8L(rv2i(rv).(map[string]uint8), containerLen, d)
4232
	}
4233
	d.mapEnd()
4234
}
4235
func (f fastpathT) DecMapStringUint8X(vp *map[string]uint8, d *Decoder) {
4236
	containerLen := d.mapStart(d.d.ReadMapStart())
4237
	if containerLen == containerLenNil {
4238
		*vp = nil
4239
	} else {
4240
		if *vp == nil {
4241
			*vp = make(map[string]uint8, decInferLen(containerLen, d.h.MaxInitLen, 17))
4242
		}
4243
		if containerLen != 0 {
4244
			f.DecMapStringUint8L(*vp, containerLen, d)
4245
		}
4246
		d.mapEnd()
4247
	}
4248
}
4249
func (fastpathT) DecMapStringUint8L(v map[string]uint8, containerLen int, d *Decoder) {
4250
	if v == nil {
4251
		d.errorf("cannot decode into nil map[string]uint8 given stream length: %v", containerLen)
4252
		return
4253
	}
4254
	var mk string
4255
	var mv uint8
4256
	hasLen := containerLen > 0
4257
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4258
		d.mapElemKey()
4259
		mk = d.stringZC(d.d.DecodeStringAsBytes())
4260
		d.mapElemValue()
4261
		mv = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
4262
		v[mk] = mv
4263
	}
4264
}
4265
func (d *Decoder) fastpathDecMapStringUint64R(f *codecFnInfo, rv reflect.Value) {
4266
	containerLen := d.mapStart(d.d.ReadMapStart())
4267
	if rv.Kind() == reflect.Ptr {
4268
		vp, _ := rv2i(rv).(*map[string]uint64)
4269
		if *vp == nil {
4270
			*vp = make(map[string]uint64, decInferLen(containerLen, d.h.MaxInitLen, 24))
4271
		}
4272
		if containerLen != 0 {
4273
			fastpathTV.DecMapStringUint64L(*vp, containerLen, d)
4274
		}
4275
	} else if containerLen != 0 {
4276
		fastpathTV.DecMapStringUint64L(rv2i(rv).(map[string]uint64), containerLen, d)
4277
	}
4278
	d.mapEnd()
4279
}
4280
func (f fastpathT) DecMapStringUint64X(vp *map[string]uint64, d *Decoder) {
4281
	containerLen := d.mapStart(d.d.ReadMapStart())
4282
	if containerLen == containerLenNil {
4283
		*vp = nil
4284
	} else {
4285
		if *vp == nil {
4286
			*vp = make(map[string]uint64, decInferLen(containerLen, d.h.MaxInitLen, 24))
4287
		}
4288
		if containerLen != 0 {
4289
			f.DecMapStringUint64L(*vp, containerLen, d)
4290
		}
4291
		d.mapEnd()
4292
	}
4293
}
4294
func (fastpathT) DecMapStringUint64L(v map[string]uint64, containerLen int, d *Decoder) {
4295
	if v == nil {
4296
		d.errorf("cannot decode into nil map[string]uint64 given stream length: %v", containerLen)
4297
		return
4298
	}
4299
	var mk string
4300
	var mv uint64
4301
	hasLen := containerLen > 0
4302
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4303
		d.mapElemKey()
4304
		mk = d.stringZC(d.d.DecodeStringAsBytes())
4305
		d.mapElemValue()
4306
		mv = d.d.DecodeUint64()
4307
		v[mk] = mv
4308
	}
4309
}
4310
func (d *Decoder) fastpathDecMapStringIntR(f *codecFnInfo, rv reflect.Value) {
4311
	containerLen := d.mapStart(d.d.ReadMapStart())
4312
	if rv.Kind() == reflect.Ptr {
4313
		vp, _ := rv2i(rv).(*map[string]int)
4314
		if *vp == nil {
4315
			*vp = make(map[string]int, decInferLen(containerLen, d.h.MaxInitLen, 24))
4316
		}
4317
		if containerLen != 0 {
4318
			fastpathTV.DecMapStringIntL(*vp, containerLen, d)
4319
		}
4320
	} else if containerLen != 0 {
4321
		fastpathTV.DecMapStringIntL(rv2i(rv).(map[string]int), containerLen, d)
4322
	}
4323
	d.mapEnd()
4324
}
4325
func (f fastpathT) DecMapStringIntX(vp *map[string]int, d *Decoder) {
4326
	containerLen := d.mapStart(d.d.ReadMapStart())
4327
	if containerLen == containerLenNil {
4328
		*vp = nil
4329
	} else {
4330
		if *vp == nil {
4331
			*vp = make(map[string]int, decInferLen(containerLen, d.h.MaxInitLen, 24))
4332
		}
4333
		if containerLen != 0 {
4334
			f.DecMapStringIntL(*vp, containerLen, d)
4335
		}
4336
		d.mapEnd()
4337
	}
4338
}
4339
func (fastpathT) DecMapStringIntL(v map[string]int, containerLen int, d *Decoder) {
4340
	if v == nil {
4341
		d.errorf("cannot decode into nil map[string]int given stream length: %v", containerLen)
4342
		return
4343
	}
4344
	var mk string
4345
	var mv int
4346
	hasLen := containerLen > 0
4347
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4348
		d.mapElemKey()
4349
		mk = d.stringZC(d.d.DecodeStringAsBytes())
4350
		d.mapElemValue()
4351
		mv = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
4352
		v[mk] = mv
4353
	}
4354
}
4355
func (d *Decoder) fastpathDecMapStringInt32R(f *codecFnInfo, rv reflect.Value) {
4356
	containerLen := d.mapStart(d.d.ReadMapStart())
4357
	if rv.Kind() == reflect.Ptr {
4358
		vp, _ := rv2i(rv).(*map[string]int32)
4359
		if *vp == nil {
4360
			*vp = make(map[string]int32, decInferLen(containerLen, d.h.MaxInitLen, 20))
4361
		}
4362
		if containerLen != 0 {
4363
			fastpathTV.DecMapStringInt32L(*vp, containerLen, d)
4364
		}
4365
	} else if containerLen != 0 {
4366
		fastpathTV.DecMapStringInt32L(rv2i(rv).(map[string]int32), containerLen, d)
4367
	}
4368
	d.mapEnd()
4369
}
4370
func (f fastpathT) DecMapStringInt32X(vp *map[string]int32, d *Decoder) {
4371
	containerLen := d.mapStart(d.d.ReadMapStart())
4372
	if containerLen == containerLenNil {
4373
		*vp = nil
4374
	} else {
4375
		if *vp == nil {
4376
			*vp = make(map[string]int32, decInferLen(containerLen, d.h.MaxInitLen, 20))
4377
		}
4378
		if containerLen != 0 {
4379
			f.DecMapStringInt32L(*vp, containerLen, d)
4380
		}
4381
		d.mapEnd()
4382
	}
4383
}
4384
func (fastpathT) DecMapStringInt32L(v map[string]int32, containerLen int, d *Decoder) {
4385
	if v == nil {
4386
		d.errorf("cannot decode into nil map[string]int32 given stream length: %v", containerLen)
4387
		return
4388
	}
4389
	var mk string
4390
	var mv int32
4391
	hasLen := containerLen > 0
4392
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4393
		d.mapElemKey()
4394
		mk = d.stringZC(d.d.DecodeStringAsBytes())
4395
		d.mapElemValue()
4396
		mv = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
4397
		v[mk] = mv
4398
	}
4399
}
4400
func (d *Decoder) fastpathDecMapStringFloat64R(f *codecFnInfo, rv reflect.Value) {
4401
	containerLen := d.mapStart(d.d.ReadMapStart())
4402
	if rv.Kind() == reflect.Ptr {
4403
		vp, _ := rv2i(rv).(*map[string]float64)
4404
		if *vp == nil {
4405
			*vp = make(map[string]float64, decInferLen(containerLen, d.h.MaxInitLen, 24))
4406
		}
4407
		if containerLen != 0 {
4408
			fastpathTV.DecMapStringFloat64L(*vp, containerLen, d)
4409
		}
4410
	} else if containerLen != 0 {
4411
		fastpathTV.DecMapStringFloat64L(rv2i(rv).(map[string]float64), containerLen, d)
4412
	}
4413
	d.mapEnd()
4414
}
4415
func (f fastpathT) DecMapStringFloat64X(vp *map[string]float64, d *Decoder) {
4416
	containerLen := d.mapStart(d.d.ReadMapStart())
4417
	if containerLen == containerLenNil {
4418
		*vp = nil
4419
	} else {
4420
		if *vp == nil {
4421
			*vp = make(map[string]float64, decInferLen(containerLen, d.h.MaxInitLen, 24))
4422
		}
4423
		if containerLen != 0 {
4424
			f.DecMapStringFloat64L(*vp, containerLen, d)
4425
		}
4426
		d.mapEnd()
4427
	}
4428
}
4429
func (fastpathT) DecMapStringFloat64L(v map[string]float64, containerLen int, d *Decoder) {
4430
	if v == nil {
4431
		d.errorf("cannot decode into nil map[string]float64 given stream length: %v", containerLen)
4432
		return
4433
	}
4434
	var mk string
4435
	var mv float64
4436
	hasLen := containerLen > 0
4437
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4438
		d.mapElemKey()
4439
		mk = d.stringZC(d.d.DecodeStringAsBytes())
4440
		d.mapElemValue()
4441
		mv = d.d.DecodeFloat64()
4442
		v[mk] = mv
4443
	}
4444
}
4445
func (d *Decoder) fastpathDecMapStringBoolR(f *codecFnInfo, rv reflect.Value) {
4446
	containerLen := d.mapStart(d.d.ReadMapStart())
4447
	if rv.Kind() == reflect.Ptr {
4448
		vp, _ := rv2i(rv).(*map[string]bool)
4449
		if *vp == nil {
4450
			*vp = make(map[string]bool, decInferLen(containerLen, d.h.MaxInitLen, 17))
4451
		}
4452
		if containerLen != 0 {
4453
			fastpathTV.DecMapStringBoolL(*vp, containerLen, d)
4454
		}
4455
	} else if containerLen != 0 {
4456
		fastpathTV.DecMapStringBoolL(rv2i(rv).(map[string]bool), containerLen, d)
4457
	}
4458
	d.mapEnd()
4459
}
4460
func (f fastpathT) DecMapStringBoolX(vp *map[string]bool, d *Decoder) {
4461
	containerLen := d.mapStart(d.d.ReadMapStart())
4462
	if containerLen == containerLenNil {
4463
		*vp = nil
4464
	} else {
4465
		if *vp == nil {
4466
			*vp = make(map[string]bool, decInferLen(containerLen, d.h.MaxInitLen, 17))
4467
		}
4468
		if containerLen != 0 {
4469
			f.DecMapStringBoolL(*vp, containerLen, d)
4470
		}
4471
		d.mapEnd()
4472
	}
4473
}
4474
func (fastpathT) DecMapStringBoolL(v map[string]bool, containerLen int, d *Decoder) {
4475
	if v == nil {
4476
		d.errorf("cannot decode into nil map[string]bool given stream length: %v", containerLen)
4477
		return
4478
	}
4479
	var mk string
4480
	var mv bool
4481
	hasLen := containerLen > 0
4482
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4483
		d.mapElemKey()
4484
		mk = d.stringZC(d.d.DecodeStringAsBytes())
4485
		d.mapElemValue()
4486
		mv = d.d.DecodeBool()
4487
		v[mk] = mv
4488
	}
4489
}
4490
func (d *Decoder) fastpathDecMapUint8IntfR(f *codecFnInfo, rv reflect.Value) {
4491
	containerLen := d.mapStart(d.d.ReadMapStart())
4492
	if rv.Kind() == reflect.Ptr {
4493
		vp, _ := rv2i(rv).(*map[uint8]interface{})
4494
		if *vp == nil {
4495
			*vp = make(map[uint8]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 17))
4496
		}
4497
		if containerLen != 0 {
4498
			fastpathTV.DecMapUint8IntfL(*vp, containerLen, d)
4499
		}
4500
	} else if containerLen != 0 {
4501
		fastpathTV.DecMapUint8IntfL(rv2i(rv).(map[uint8]interface{}), containerLen, d)
4502
	}
4503
	d.mapEnd()
4504
}
4505
func (f fastpathT) DecMapUint8IntfX(vp *map[uint8]interface{}, d *Decoder) {
4506
	containerLen := d.mapStart(d.d.ReadMapStart())
4507
	if containerLen == containerLenNil {
4508
		*vp = nil
4509
	} else {
4510
		if *vp == nil {
4511
			*vp = make(map[uint8]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 17))
4512
		}
4513
		if containerLen != 0 {
4514
			f.DecMapUint8IntfL(*vp, containerLen, d)
4515
		}
4516
		d.mapEnd()
4517
	}
4518
}
4519
func (fastpathT) DecMapUint8IntfL(v map[uint8]interface{}, containerLen int, d *Decoder) {
4520
	if v == nil {
4521
		d.errorf("cannot decode into nil map[uint8]interface{} given stream length: %v", containerLen)
4522
		return
4523
	}
4524
	mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset
4525
	var mk uint8
4526
	var mv interface{}
4527
	hasLen := containerLen > 0
4528
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4529
		d.mapElemKey()
4530
		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
4531
		d.mapElemValue()
4532
		if mapGet {
4533
			mv = v[mk]
4534
		} else {
4535
			mv = nil
4536
		}
4537
		d.decode(&mv)
4538
		v[mk] = mv
4539
	}
4540
}
4541
func (d *Decoder) fastpathDecMapUint8StringR(f *codecFnInfo, rv reflect.Value) {
4542
	containerLen := d.mapStart(d.d.ReadMapStart())
4543
	if rv.Kind() == reflect.Ptr {
4544
		vp, _ := rv2i(rv).(*map[uint8]string)
4545
		if *vp == nil {
4546
			*vp = make(map[uint8]string, decInferLen(containerLen, d.h.MaxInitLen, 17))
4547
		}
4548
		if containerLen != 0 {
4549
			fastpathTV.DecMapUint8StringL(*vp, containerLen, d)
4550
		}
4551
	} else if containerLen != 0 {
4552
		fastpathTV.DecMapUint8StringL(rv2i(rv).(map[uint8]string), containerLen, d)
4553
	}
4554
	d.mapEnd()
4555
}
4556
func (f fastpathT) DecMapUint8StringX(vp *map[uint8]string, d *Decoder) {
4557
	containerLen := d.mapStart(d.d.ReadMapStart())
4558
	if containerLen == containerLenNil {
4559
		*vp = nil
4560
	} else {
4561
		if *vp == nil {
4562
			*vp = make(map[uint8]string, decInferLen(containerLen, d.h.MaxInitLen, 17))
4563
		}
4564
		if containerLen != 0 {
4565
			f.DecMapUint8StringL(*vp, containerLen, d)
4566
		}
4567
		d.mapEnd()
4568
	}
4569
}
4570
func (fastpathT) DecMapUint8StringL(v map[uint8]string, containerLen int, d *Decoder) {
4571
	if v == nil {
4572
		d.errorf("cannot decode into nil map[uint8]string given stream length: %v", containerLen)
4573
		return
4574
	}
4575
	var mk uint8
4576
	var mv string
4577
	hasLen := containerLen > 0
4578
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4579
		d.mapElemKey()
4580
		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
4581
		d.mapElemValue()
4582
		mv = d.stringZC(d.d.DecodeStringAsBytes())
4583
		v[mk] = mv
4584
	}
4585
}
4586
func (d *Decoder) fastpathDecMapUint8BytesR(f *codecFnInfo, rv reflect.Value) {
4587
	containerLen := d.mapStart(d.d.ReadMapStart())
4588
	if rv.Kind() == reflect.Ptr {
4589
		vp, _ := rv2i(rv).(*map[uint8][]byte)
4590
		if *vp == nil {
4591
			*vp = make(map[uint8][]byte, decInferLen(containerLen, d.h.MaxInitLen, 25))
4592
		}
4593
		if containerLen != 0 {
4594
			fastpathTV.DecMapUint8BytesL(*vp, containerLen, d)
4595
		}
4596
	} else if containerLen != 0 {
4597
		fastpathTV.DecMapUint8BytesL(rv2i(rv).(map[uint8][]byte), containerLen, d)
4598
	}
4599
	d.mapEnd()
4600
}
4601
func (f fastpathT) DecMapUint8BytesX(vp *map[uint8][]byte, d *Decoder) {
4602
	containerLen := d.mapStart(d.d.ReadMapStart())
4603
	if containerLen == containerLenNil {
4604
		*vp = nil
4605
	} else {
4606
		if *vp == nil {
4607
			*vp = make(map[uint8][]byte, decInferLen(containerLen, d.h.MaxInitLen, 25))
4608
		}
4609
		if containerLen != 0 {
4610
			f.DecMapUint8BytesL(*vp, containerLen, d)
4611
		}
4612
		d.mapEnd()
4613
	}
4614
}
4615
func (fastpathT) DecMapUint8BytesL(v map[uint8][]byte, containerLen int, d *Decoder) {
4616
	if v == nil {
4617
		d.errorf("cannot decode into nil map[uint8][]byte given stream length: %v", containerLen)
4618
		return
4619
	}
4620
	mapGet := v != nil && !d.h.MapValueReset
4621
	var mk uint8
4622
	var mv []byte
4623
	hasLen := containerLen > 0
4624
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4625
		d.mapElemKey()
4626
		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
4627
		d.mapElemValue()
4628
		if mapGet {
4629
			mv = v[mk]
4630
		} else {
4631
			mv = nil
4632
		}
4633
		mv = d.decodeBytesInto(mv)
4634
		v[mk] = mv
4635
	}
4636
}
4637
func (d *Decoder) fastpathDecMapUint8Uint8R(f *codecFnInfo, rv reflect.Value) {
4638
	containerLen := d.mapStart(d.d.ReadMapStart())
4639
	if rv.Kind() == reflect.Ptr {
4640
		vp, _ := rv2i(rv).(*map[uint8]uint8)
4641
		if *vp == nil {
4642
			*vp = make(map[uint8]uint8, decInferLen(containerLen, d.h.MaxInitLen, 2))
4643
		}
4644
		if containerLen != 0 {
4645
			fastpathTV.DecMapUint8Uint8L(*vp, containerLen, d)
4646
		}
4647
	} else if containerLen != 0 {
4648
		fastpathTV.DecMapUint8Uint8L(rv2i(rv).(map[uint8]uint8), containerLen, d)
4649
	}
4650
	d.mapEnd()
4651
}
4652
func (f fastpathT) DecMapUint8Uint8X(vp *map[uint8]uint8, d *Decoder) {
4653
	containerLen := d.mapStart(d.d.ReadMapStart())
4654
	if containerLen == containerLenNil {
4655
		*vp = nil
4656
	} else {
4657
		if *vp == nil {
4658
			*vp = make(map[uint8]uint8, decInferLen(containerLen, d.h.MaxInitLen, 2))
4659
		}
4660
		if containerLen != 0 {
4661
			f.DecMapUint8Uint8L(*vp, containerLen, d)
4662
		}
4663
		d.mapEnd()
4664
	}
4665
}
4666
func (fastpathT) DecMapUint8Uint8L(v map[uint8]uint8, containerLen int, d *Decoder) {
4667
	if v == nil {
4668
		d.errorf("cannot decode into nil map[uint8]uint8 given stream length: %v", containerLen)
4669
		return
4670
	}
4671
	var mk uint8
4672
	var mv uint8
4673
	hasLen := containerLen > 0
4674
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4675
		d.mapElemKey()
4676
		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
4677
		d.mapElemValue()
4678
		mv = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
4679
		v[mk] = mv
4680
	}
4681
}
4682
func (d *Decoder) fastpathDecMapUint8Uint64R(f *codecFnInfo, rv reflect.Value) {
4683
	containerLen := d.mapStart(d.d.ReadMapStart())
4684
	if rv.Kind() == reflect.Ptr {
4685
		vp, _ := rv2i(rv).(*map[uint8]uint64)
4686
		if *vp == nil {
4687
			*vp = make(map[uint8]uint64, decInferLen(containerLen, d.h.MaxInitLen, 9))
4688
		}
4689
		if containerLen != 0 {
4690
			fastpathTV.DecMapUint8Uint64L(*vp, containerLen, d)
4691
		}
4692
	} else if containerLen != 0 {
4693
		fastpathTV.DecMapUint8Uint64L(rv2i(rv).(map[uint8]uint64), containerLen, d)
4694
	}
4695
	d.mapEnd()
4696
}
4697
func (f fastpathT) DecMapUint8Uint64X(vp *map[uint8]uint64, d *Decoder) {
4698
	containerLen := d.mapStart(d.d.ReadMapStart())
4699
	if containerLen == containerLenNil {
4700
		*vp = nil
4701
	} else {
4702
		if *vp == nil {
4703
			*vp = make(map[uint8]uint64, decInferLen(containerLen, d.h.MaxInitLen, 9))
4704
		}
4705
		if containerLen != 0 {
4706
			f.DecMapUint8Uint64L(*vp, containerLen, d)
4707
		}
4708
		d.mapEnd()
4709
	}
4710
}
4711
func (fastpathT) DecMapUint8Uint64L(v map[uint8]uint64, containerLen int, d *Decoder) {
4712
	if v == nil {
4713
		d.errorf("cannot decode into nil map[uint8]uint64 given stream length: %v", containerLen)
4714
		return
4715
	}
4716
	var mk uint8
4717
	var mv uint64
4718
	hasLen := containerLen > 0
4719
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4720
		d.mapElemKey()
4721
		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
4722
		d.mapElemValue()
4723
		mv = d.d.DecodeUint64()
4724
		v[mk] = mv
4725
	}
4726
}
4727
func (d *Decoder) fastpathDecMapUint8IntR(f *codecFnInfo, rv reflect.Value) {
4728
	containerLen := d.mapStart(d.d.ReadMapStart())
4729
	if rv.Kind() == reflect.Ptr {
4730
		vp, _ := rv2i(rv).(*map[uint8]int)
4731
		if *vp == nil {
4732
			*vp = make(map[uint8]int, decInferLen(containerLen, d.h.MaxInitLen, 9))
4733
		}
4734
		if containerLen != 0 {
4735
			fastpathTV.DecMapUint8IntL(*vp, containerLen, d)
4736
		}
4737
	} else if containerLen != 0 {
4738
		fastpathTV.DecMapUint8IntL(rv2i(rv).(map[uint8]int), containerLen, d)
4739
	}
4740
	d.mapEnd()
4741
}
4742
func (f fastpathT) DecMapUint8IntX(vp *map[uint8]int, d *Decoder) {
4743
	containerLen := d.mapStart(d.d.ReadMapStart())
4744
	if containerLen == containerLenNil {
4745
		*vp = nil
4746
	} else {
4747
		if *vp == nil {
4748
			*vp = make(map[uint8]int, decInferLen(containerLen, d.h.MaxInitLen, 9))
4749
		}
4750
		if containerLen != 0 {
4751
			f.DecMapUint8IntL(*vp, containerLen, d)
4752
		}
4753
		d.mapEnd()
4754
	}
4755
}
4756
func (fastpathT) DecMapUint8IntL(v map[uint8]int, containerLen int, d *Decoder) {
4757
	if v == nil {
4758
		d.errorf("cannot decode into nil map[uint8]int given stream length: %v", containerLen)
4759
		return
4760
	}
4761
	var mk uint8
4762
	var mv int
4763
	hasLen := containerLen > 0
4764
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4765
		d.mapElemKey()
4766
		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
4767
		d.mapElemValue()
4768
		mv = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
4769
		v[mk] = mv
4770
	}
4771
}
4772
func (d *Decoder) fastpathDecMapUint8Int32R(f *codecFnInfo, rv reflect.Value) {
4773
	containerLen := d.mapStart(d.d.ReadMapStart())
4774
	if rv.Kind() == reflect.Ptr {
4775
		vp, _ := rv2i(rv).(*map[uint8]int32)
4776
		if *vp == nil {
4777
			*vp = make(map[uint8]int32, decInferLen(containerLen, d.h.MaxInitLen, 5))
4778
		}
4779
		if containerLen != 0 {
4780
			fastpathTV.DecMapUint8Int32L(*vp, containerLen, d)
4781
		}
4782
	} else if containerLen != 0 {
4783
		fastpathTV.DecMapUint8Int32L(rv2i(rv).(map[uint8]int32), containerLen, d)
4784
	}
4785
	d.mapEnd()
4786
}
4787
func (f fastpathT) DecMapUint8Int32X(vp *map[uint8]int32, d *Decoder) {
4788
	containerLen := d.mapStart(d.d.ReadMapStart())
4789
	if containerLen == containerLenNil {
4790
		*vp = nil
4791
	} else {
4792
		if *vp == nil {
4793
			*vp = make(map[uint8]int32, decInferLen(containerLen, d.h.MaxInitLen, 5))
4794
		}
4795
		if containerLen != 0 {
4796
			f.DecMapUint8Int32L(*vp, containerLen, d)
4797
		}
4798
		d.mapEnd()
4799
	}
4800
}
4801
func (fastpathT) DecMapUint8Int32L(v map[uint8]int32, containerLen int, d *Decoder) {
4802
	if v == nil {
4803
		d.errorf("cannot decode into nil map[uint8]int32 given stream length: %v", containerLen)
4804
		return
4805
	}
4806
	var mk uint8
4807
	var mv int32
4808
	hasLen := containerLen > 0
4809
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4810
		d.mapElemKey()
4811
		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
4812
		d.mapElemValue()
4813
		mv = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
4814
		v[mk] = mv
4815
	}
4816
}
4817
func (d *Decoder) fastpathDecMapUint8Float64R(f *codecFnInfo, rv reflect.Value) {
4818
	containerLen := d.mapStart(d.d.ReadMapStart())
4819
	if rv.Kind() == reflect.Ptr {
4820
		vp, _ := rv2i(rv).(*map[uint8]float64)
4821
		if *vp == nil {
4822
			*vp = make(map[uint8]float64, decInferLen(containerLen, d.h.MaxInitLen, 9))
4823
		}
4824
		if containerLen != 0 {
4825
			fastpathTV.DecMapUint8Float64L(*vp, containerLen, d)
4826
		}
4827
	} else if containerLen != 0 {
4828
		fastpathTV.DecMapUint8Float64L(rv2i(rv).(map[uint8]float64), containerLen, d)
4829
	}
4830
	d.mapEnd()
4831
}
4832
func (f fastpathT) DecMapUint8Float64X(vp *map[uint8]float64, d *Decoder) {
4833
	containerLen := d.mapStart(d.d.ReadMapStart())
4834
	if containerLen == containerLenNil {
4835
		*vp = nil
4836
	} else {
4837
		if *vp == nil {
4838
			*vp = make(map[uint8]float64, decInferLen(containerLen, d.h.MaxInitLen, 9))
4839
		}
4840
		if containerLen != 0 {
4841
			f.DecMapUint8Float64L(*vp, containerLen, d)
4842
		}
4843
		d.mapEnd()
4844
	}
4845
}
4846
func (fastpathT) DecMapUint8Float64L(v map[uint8]float64, containerLen int, d *Decoder) {
4847
	if v == nil {
4848
		d.errorf("cannot decode into nil map[uint8]float64 given stream length: %v", containerLen)
4849
		return
4850
	}
4851
	var mk uint8
4852
	var mv float64
4853
	hasLen := containerLen > 0
4854
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4855
		d.mapElemKey()
4856
		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
4857
		d.mapElemValue()
4858
		mv = d.d.DecodeFloat64()
4859
		v[mk] = mv
4860
	}
4861
}
4862
func (d *Decoder) fastpathDecMapUint8BoolR(f *codecFnInfo, rv reflect.Value) {
4863
	containerLen := d.mapStart(d.d.ReadMapStart())
4864
	if rv.Kind() == reflect.Ptr {
4865
		vp, _ := rv2i(rv).(*map[uint8]bool)
4866
		if *vp == nil {
4867
			*vp = make(map[uint8]bool, decInferLen(containerLen, d.h.MaxInitLen, 2))
4868
		}
4869
		if containerLen != 0 {
4870
			fastpathTV.DecMapUint8BoolL(*vp, containerLen, d)
4871
		}
4872
	} else if containerLen != 0 {
4873
		fastpathTV.DecMapUint8BoolL(rv2i(rv).(map[uint8]bool), containerLen, d)
4874
	}
4875
	d.mapEnd()
4876
}
4877
func (f fastpathT) DecMapUint8BoolX(vp *map[uint8]bool, d *Decoder) {
4878
	containerLen := d.mapStart(d.d.ReadMapStart())
4879
	if containerLen == containerLenNil {
4880
		*vp = nil
4881
	} else {
4882
		if *vp == nil {
4883
			*vp = make(map[uint8]bool, decInferLen(containerLen, d.h.MaxInitLen, 2))
4884
		}
4885
		if containerLen != 0 {
4886
			f.DecMapUint8BoolL(*vp, containerLen, d)
4887
		}
4888
		d.mapEnd()
4889
	}
4890
}
4891
func (fastpathT) DecMapUint8BoolL(v map[uint8]bool, containerLen int, d *Decoder) {
4892
	if v == nil {
4893
		d.errorf("cannot decode into nil map[uint8]bool given stream length: %v", containerLen)
4894
		return
4895
	}
4896
	var mk uint8
4897
	var mv bool
4898
	hasLen := containerLen > 0
4899
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4900
		d.mapElemKey()
4901
		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
4902
		d.mapElemValue()
4903
		mv = d.d.DecodeBool()
4904
		v[mk] = mv
4905
	}
4906
}
4907
func (d *Decoder) fastpathDecMapUint64IntfR(f *codecFnInfo, rv reflect.Value) {
4908
	containerLen := d.mapStart(d.d.ReadMapStart())
4909
	if rv.Kind() == reflect.Ptr {
4910
		vp, _ := rv2i(rv).(*map[uint64]interface{})
4911
		if *vp == nil {
4912
			*vp = make(map[uint64]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 24))
4913
		}
4914
		if containerLen != 0 {
4915
			fastpathTV.DecMapUint64IntfL(*vp, containerLen, d)
4916
		}
4917
	} else if containerLen != 0 {
4918
		fastpathTV.DecMapUint64IntfL(rv2i(rv).(map[uint64]interface{}), containerLen, d)
4919
	}
4920
	d.mapEnd()
4921
}
4922
func (f fastpathT) DecMapUint64IntfX(vp *map[uint64]interface{}, d *Decoder) {
4923
	containerLen := d.mapStart(d.d.ReadMapStart())
4924
	if containerLen == containerLenNil {
4925
		*vp = nil
4926
	} else {
4927
		if *vp == nil {
4928
			*vp = make(map[uint64]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 24))
4929
		}
4930
		if containerLen != 0 {
4931
			f.DecMapUint64IntfL(*vp, containerLen, d)
4932
		}
4933
		d.mapEnd()
4934
	}
4935
}
4936
func (fastpathT) DecMapUint64IntfL(v map[uint64]interface{}, containerLen int, d *Decoder) {
4937
	if v == nil {
4938
		d.errorf("cannot decode into nil map[uint64]interface{} given stream length: %v", containerLen)
4939
		return
4940
	}
4941
	mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset
4942
	var mk uint64
4943
	var mv interface{}
4944
	hasLen := containerLen > 0
4945
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4946
		d.mapElemKey()
4947
		mk = d.d.DecodeUint64()
4948
		d.mapElemValue()
4949
		if mapGet {
4950
			mv = v[mk]
4951
		} else {
4952
			mv = nil
4953
		}
4954
		d.decode(&mv)
4955
		v[mk] = mv
4956
	}
4957
}
4958
func (d *Decoder) fastpathDecMapUint64StringR(f *codecFnInfo, rv reflect.Value) {
4959
	containerLen := d.mapStart(d.d.ReadMapStart())
4960
	if rv.Kind() == reflect.Ptr {
4961
		vp, _ := rv2i(rv).(*map[uint64]string)
4962
		if *vp == nil {
4963
			*vp = make(map[uint64]string, decInferLen(containerLen, d.h.MaxInitLen, 24))
4964
		}
4965
		if containerLen != 0 {
4966
			fastpathTV.DecMapUint64StringL(*vp, containerLen, d)
4967
		}
4968
	} else if containerLen != 0 {
4969
		fastpathTV.DecMapUint64StringL(rv2i(rv).(map[uint64]string), containerLen, d)
4970
	}
4971
	d.mapEnd()
4972
}
4973
func (f fastpathT) DecMapUint64StringX(vp *map[uint64]string, d *Decoder) {
4974
	containerLen := d.mapStart(d.d.ReadMapStart())
4975
	if containerLen == containerLenNil {
4976
		*vp = nil
4977
	} else {
4978
		if *vp == nil {
4979
			*vp = make(map[uint64]string, decInferLen(containerLen, d.h.MaxInitLen, 24))
4980
		}
4981
		if containerLen != 0 {
4982
			f.DecMapUint64StringL(*vp, containerLen, d)
4983
		}
4984
		d.mapEnd()
4985
	}
4986
}
4987
func (fastpathT) DecMapUint64StringL(v map[uint64]string, containerLen int, d *Decoder) {
4988
	if v == nil {
4989
		d.errorf("cannot decode into nil map[uint64]string given stream length: %v", containerLen)
4990
		return
4991
	}
4992
	var mk uint64
4993
	var mv string
4994
	hasLen := containerLen > 0
4995
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
4996
		d.mapElemKey()
4997
		mk = d.d.DecodeUint64()
4998
		d.mapElemValue()
4999
		mv = d.stringZC(d.d.DecodeStringAsBytes())
5000
		v[mk] = mv
5001
	}
5002
}
5003
func (d *Decoder) fastpathDecMapUint64BytesR(f *codecFnInfo, rv reflect.Value) {
5004
	containerLen := d.mapStart(d.d.ReadMapStart())
5005
	if rv.Kind() == reflect.Ptr {
5006
		vp, _ := rv2i(rv).(*map[uint64][]byte)
5007
		if *vp == nil {
5008
			*vp = make(map[uint64][]byte, decInferLen(containerLen, d.h.MaxInitLen, 32))
5009
		}
5010
		if containerLen != 0 {
5011
			fastpathTV.DecMapUint64BytesL(*vp, containerLen, d)
5012
		}
5013
	} else if containerLen != 0 {
5014
		fastpathTV.DecMapUint64BytesL(rv2i(rv).(map[uint64][]byte), containerLen, d)
5015
	}
5016
	d.mapEnd()
5017
}
5018
func (f fastpathT) DecMapUint64BytesX(vp *map[uint64][]byte, d *Decoder) {
5019
	containerLen := d.mapStart(d.d.ReadMapStart())
5020
	if containerLen == containerLenNil {
5021
		*vp = nil
5022
	} else {
5023
		if *vp == nil {
5024
			*vp = make(map[uint64][]byte, decInferLen(containerLen, d.h.MaxInitLen, 32))
5025
		}
5026
		if containerLen != 0 {
5027
			f.DecMapUint64BytesL(*vp, containerLen, d)
5028
		}
5029
		d.mapEnd()
5030
	}
5031
}
5032
func (fastpathT) DecMapUint64BytesL(v map[uint64][]byte, containerLen int, d *Decoder) {
5033
	if v == nil {
5034
		d.errorf("cannot decode into nil map[uint64][]byte given stream length: %v", containerLen)
5035
		return
5036
	}
5037
	mapGet := v != nil && !d.h.MapValueReset
5038
	var mk uint64
5039
	var mv []byte
5040
	hasLen := containerLen > 0
5041
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5042
		d.mapElemKey()
5043
		mk = d.d.DecodeUint64()
5044
		d.mapElemValue()
5045
		if mapGet {
5046
			mv = v[mk]
5047
		} else {
5048
			mv = nil
5049
		}
5050
		mv = d.decodeBytesInto(mv)
5051
		v[mk] = mv
5052
	}
5053
}
5054
func (d *Decoder) fastpathDecMapUint64Uint8R(f *codecFnInfo, rv reflect.Value) {
5055
	containerLen := d.mapStart(d.d.ReadMapStart())
5056
	if rv.Kind() == reflect.Ptr {
5057
		vp, _ := rv2i(rv).(*map[uint64]uint8)
5058
		if *vp == nil {
5059
			*vp = make(map[uint64]uint8, decInferLen(containerLen, d.h.MaxInitLen, 9))
5060
		}
5061
		if containerLen != 0 {
5062
			fastpathTV.DecMapUint64Uint8L(*vp, containerLen, d)
5063
		}
5064
	} else if containerLen != 0 {
5065
		fastpathTV.DecMapUint64Uint8L(rv2i(rv).(map[uint64]uint8), containerLen, d)
5066
	}
5067
	d.mapEnd()
5068
}
5069
func (f fastpathT) DecMapUint64Uint8X(vp *map[uint64]uint8, d *Decoder) {
5070
	containerLen := d.mapStart(d.d.ReadMapStart())
5071
	if containerLen == containerLenNil {
5072
		*vp = nil
5073
	} else {
5074
		if *vp == nil {
5075
			*vp = make(map[uint64]uint8, decInferLen(containerLen, d.h.MaxInitLen, 9))
5076
		}
5077
		if containerLen != 0 {
5078
			f.DecMapUint64Uint8L(*vp, containerLen, d)
5079
		}
5080
		d.mapEnd()
5081
	}
5082
}
5083
func (fastpathT) DecMapUint64Uint8L(v map[uint64]uint8, containerLen int, d *Decoder) {
5084
	if v == nil {
5085
		d.errorf("cannot decode into nil map[uint64]uint8 given stream length: %v", containerLen)
5086
		return
5087
	}
5088
	var mk uint64
5089
	var mv uint8
5090
	hasLen := containerLen > 0
5091
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5092
		d.mapElemKey()
5093
		mk = d.d.DecodeUint64()
5094
		d.mapElemValue()
5095
		mv = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
5096
		v[mk] = mv
5097
	}
5098
}
5099
func (d *Decoder) fastpathDecMapUint64Uint64R(f *codecFnInfo, rv reflect.Value) {
5100
	containerLen := d.mapStart(d.d.ReadMapStart())
5101
	if rv.Kind() == reflect.Ptr {
5102
		vp, _ := rv2i(rv).(*map[uint64]uint64)
5103
		if *vp == nil {
5104
			*vp = make(map[uint64]uint64, decInferLen(containerLen, d.h.MaxInitLen, 16))
5105
		}
5106
		if containerLen != 0 {
5107
			fastpathTV.DecMapUint64Uint64L(*vp, containerLen, d)
5108
		}
5109
	} else if containerLen != 0 {
5110
		fastpathTV.DecMapUint64Uint64L(rv2i(rv).(map[uint64]uint64), containerLen, d)
5111
	}
5112
	d.mapEnd()
5113
}
5114
func (f fastpathT) DecMapUint64Uint64X(vp *map[uint64]uint64, d *Decoder) {
5115
	containerLen := d.mapStart(d.d.ReadMapStart())
5116
	if containerLen == containerLenNil {
5117
		*vp = nil
5118
	} else {
5119
		if *vp == nil {
5120
			*vp = make(map[uint64]uint64, decInferLen(containerLen, d.h.MaxInitLen, 16))
5121
		}
5122
		if containerLen != 0 {
5123
			f.DecMapUint64Uint64L(*vp, containerLen, d)
5124
		}
5125
		d.mapEnd()
5126
	}
5127
}
5128
func (fastpathT) DecMapUint64Uint64L(v map[uint64]uint64, containerLen int, d *Decoder) {
5129
	if v == nil {
5130
		d.errorf("cannot decode into nil map[uint64]uint64 given stream length: %v", containerLen)
5131
		return
5132
	}
5133
	var mk uint64
5134
	var mv uint64
5135
	hasLen := containerLen > 0
5136
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5137
		d.mapElemKey()
5138
		mk = d.d.DecodeUint64()
5139
		d.mapElemValue()
5140
		mv = d.d.DecodeUint64()
5141
		v[mk] = mv
5142
	}
5143
}
5144
func (d *Decoder) fastpathDecMapUint64IntR(f *codecFnInfo, rv reflect.Value) {
5145
	containerLen := d.mapStart(d.d.ReadMapStart())
5146
	if rv.Kind() == reflect.Ptr {
5147
		vp, _ := rv2i(rv).(*map[uint64]int)
5148
		if *vp == nil {
5149
			*vp = make(map[uint64]int, decInferLen(containerLen, d.h.MaxInitLen, 16))
5150
		}
5151
		if containerLen != 0 {
5152
			fastpathTV.DecMapUint64IntL(*vp, containerLen, d)
5153
		}
5154
	} else if containerLen != 0 {
5155
		fastpathTV.DecMapUint64IntL(rv2i(rv).(map[uint64]int), containerLen, d)
5156
	}
5157
	d.mapEnd()
5158
}
5159
func (f fastpathT) DecMapUint64IntX(vp *map[uint64]int, d *Decoder) {
5160
	containerLen := d.mapStart(d.d.ReadMapStart())
5161
	if containerLen == containerLenNil {
5162
		*vp = nil
5163
	} else {
5164
		if *vp == nil {
5165
			*vp = make(map[uint64]int, decInferLen(containerLen, d.h.MaxInitLen, 16))
5166
		}
5167
		if containerLen != 0 {
5168
			f.DecMapUint64IntL(*vp, containerLen, d)
5169
		}
5170
		d.mapEnd()
5171
	}
5172
}
5173
func (fastpathT) DecMapUint64IntL(v map[uint64]int, containerLen int, d *Decoder) {
5174
	if v == nil {
5175
		d.errorf("cannot decode into nil map[uint64]int given stream length: %v", containerLen)
5176
		return
5177
	}
5178
	var mk uint64
5179
	var mv int
5180
	hasLen := containerLen > 0
5181
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5182
		d.mapElemKey()
5183
		mk = d.d.DecodeUint64()
5184
		d.mapElemValue()
5185
		mv = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
5186
		v[mk] = mv
5187
	}
5188
}
5189
func (d *Decoder) fastpathDecMapUint64Int32R(f *codecFnInfo, rv reflect.Value) {
5190
	containerLen := d.mapStart(d.d.ReadMapStart())
5191
	if rv.Kind() == reflect.Ptr {
5192
		vp, _ := rv2i(rv).(*map[uint64]int32)
5193
		if *vp == nil {
5194
			*vp = make(map[uint64]int32, decInferLen(containerLen, d.h.MaxInitLen, 12))
5195
		}
5196
		if containerLen != 0 {
5197
			fastpathTV.DecMapUint64Int32L(*vp, containerLen, d)
5198
		}
5199
	} else if containerLen != 0 {
5200
		fastpathTV.DecMapUint64Int32L(rv2i(rv).(map[uint64]int32), containerLen, d)
5201
	}
5202
	d.mapEnd()
5203
}
5204
func (f fastpathT) DecMapUint64Int32X(vp *map[uint64]int32, d *Decoder) {
5205
	containerLen := d.mapStart(d.d.ReadMapStart())
5206
	if containerLen == containerLenNil {
5207
		*vp = nil
5208
	} else {
5209
		if *vp == nil {
5210
			*vp = make(map[uint64]int32, decInferLen(containerLen, d.h.MaxInitLen, 12))
5211
		}
5212
		if containerLen != 0 {
5213
			f.DecMapUint64Int32L(*vp, containerLen, d)
5214
		}
5215
		d.mapEnd()
5216
	}
5217
}
5218
func (fastpathT) DecMapUint64Int32L(v map[uint64]int32, containerLen int, d *Decoder) {
5219
	if v == nil {
5220
		d.errorf("cannot decode into nil map[uint64]int32 given stream length: %v", containerLen)
5221
		return
5222
	}
5223
	var mk uint64
5224
	var mv int32
5225
	hasLen := containerLen > 0
5226
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5227
		d.mapElemKey()
5228
		mk = d.d.DecodeUint64()
5229
		d.mapElemValue()
5230
		mv = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
5231
		v[mk] = mv
5232
	}
5233
}
5234
func (d *Decoder) fastpathDecMapUint64Float64R(f *codecFnInfo, rv reflect.Value) {
5235
	containerLen := d.mapStart(d.d.ReadMapStart())
5236
	if rv.Kind() == reflect.Ptr {
5237
		vp, _ := rv2i(rv).(*map[uint64]float64)
5238
		if *vp == nil {
5239
			*vp = make(map[uint64]float64, decInferLen(containerLen, d.h.MaxInitLen, 16))
5240
		}
5241
		if containerLen != 0 {
5242
			fastpathTV.DecMapUint64Float64L(*vp, containerLen, d)
5243
		}
5244
	} else if containerLen != 0 {
5245
		fastpathTV.DecMapUint64Float64L(rv2i(rv).(map[uint64]float64), containerLen, d)
5246
	}
5247
	d.mapEnd()
5248
}
5249
func (f fastpathT) DecMapUint64Float64X(vp *map[uint64]float64, d *Decoder) {
5250
	containerLen := d.mapStart(d.d.ReadMapStart())
5251
	if containerLen == containerLenNil {
5252
		*vp = nil
5253
	} else {
5254
		if *vp == nil {
5255
			*vp = make(map[uint64]float64, decInferLen(containerLen, d.h.MaxInitLen, 16))
5256
		}
5257
		if containerLen != 0 {
5258
			f.DecMapUint64Float64L(*vp, containerLen, d)
5259
		}
5260
		d.mapEnd()
5261
	}
5262
}
5263
func (fastpathT) DecMapUint64Float64L(v map[uint64]float64, containerLen int, d *Decoder) {
5264
	if v == nil {
5265
		d.errorf("cannot decode into nil map[uint64]float64 given stream length: %v", containerLen)
5266
		return
5267
	}
5268
	var mk uint64
5269
	var mv float64
5270
	hasLen := containerLen > 0
5271
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5272
		d.mapElemKey()
5273
		mk = d.d.DecodeUint64()
5274
		d.mapElemValue()
5275
		mv = d.d.DecodeFloat64()
5276
		v[mk] = mv
5277
	}
5278
}
5279
func (d *Decoder) fastpathDecMapUint64BoolR(f *codecFnInfo, rv reflect.Value) {
5280
	containerLen := d.mapStart(d.d.ReadMapStart())
5281
	if rv.Kind() == reflect.Ptr {
5282
		vp, _ := rv2i(rv).(*map[uint64]bool)
5283
		if *vp == nil {
5284
			*vp = make(map[uint64]bool, decInferLen(containerLen, d.h.MaxInitLen, 9))
5285
		}
5286
		if containerLen != 0 {
5287
			fastpathTV.DecMapUint64BoolL(*vp, containerLen, d)
5288
		}
5289
	} else if containerLen != 0 {
5290
		fastpathTV.DecMapUint64BoolL(rv2i(rv).(map[uint64]bool), containerLen, d)
5291
	}
5292
	d.mapEnd()
5293
}
5294
func (f fastpathT) DecMapUint64BoolX(vp *map[uint64]bool, d *Decoder) {
5295
	containerLen := d.mapStart(d.d.ReadMapStart())
5296
	if containerLen == containerLenNil {
5297
		*vp = nil
5298
	} else {
5299
		if *vp == nil {
5300
			*vp = make(map[uint64]bool, decInferLen(containerLen, d.h.MaxInitLen, 9))
5301
		}
5302
		if containerLen != 0 {
5303
			f.DecMapUint64BoolL(*vp, containerLen, d)
5304
		}
5305
		d.mapEnd()
5306
	}
5307
}
5308
func (fastpathT) DecMapUint64BoolL(v map[uint64]bool, containerLen int, d *Decoder) {
5309
	if v == nil {
5310
		d.errorf("cannot decode into nil map[uint64]bool given stream length: %v", containerLen)
5311
		return
5312
	}
5313
	var mk uint64
5314
	var mv bool
5315
	hasLen := containerLen > 0
5316
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5317
		d.mapElemKey()
5318
		mk = d.d.DecodeUint64()
5319
		d.mapElemValue()
5320
		mv = d.d.DecodeBool()
5321
		v[mk] = mv
5322
	}
5323
}
5324
func (d *Decoder) fastpathDecMapIntIntfR(f *codecFnInfo, rv reflect.Value) {
5325
	containerLen := d.mapStart(d.d.ReadMapStart())
5326
	if rv.Kind() == reflect.Ptr {
5327
		vp, _ := rv2i(rv).(*map[int]interface{})
5328
		if *vp == nil {
5329
			*vp = make(map[int]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 24))
5330
		}
5331
		if containerLen != 0 {
5332
			fastpathTV.DecMapIntIntfL(*vp, containerLen, d)
5333
		}
5334
	} else if containerLen != 0 {
5335
		fastpathTV.DecMapIntIntfL(rv2i(rv).(map[int]interface{}), containerLen, d)
5336
	}
5337
	d.mapEnd()
5338
}
5339
func (f fastpathT) DecMapIntIntfX(vp *map[int]interface{}, d *Decoder) {
5340
	containerLen := d.mapStart(d.d.ReadMapStart())
5341
	if containerLen == containerLenNil {
5342
		*vp = nil
5343
	} else {
5344
		if *vp == nil {
5345
			*vp = make(map[int]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 24))
5346
		}
5347
		if containerLen != 0 {
5348
			f.DecMapIntIntfL(*vp, containerLen, d)
5349
		}
5350
		d.mapEnd()
5351
	}
5352
}
5353
func (fastpathT) DecMapIntIntfL(v map[int]interface{}, containerLen int, d *Decoder) {
5354
	if v == nil {
5355
		d.errorf("cannot decode into nil map[int]interface{} given stream length: %v", containerLen)
5356
		return
5357
	}
5358
	mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset
5359
	var mk int
5360
	var mv interface{}
5361
	hasLen := containerLen > 0
5362
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5363
		d.mapElemKey()
5364
		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
5365
		d.mapElemValue()
5366
		if mapGet {
5367
			mv = v[mk]
5368
		} else {
5369
			mv = nil
5370
		}
5371
		d.decode(&mv)
5372
		v[mk] = mv
5373
	}
5374
}
5375
func (d *Decoder) fastpathDecMapIntStringR(f *codecFnInfo, rv reflect.Value) {
5376
	containerLen := d.mapStart(d.d.ReadMapStart())
5377
	if rv.Kind() == reflect.Ptr {
5378
		vp, _ := rv2i(rv).(*map[int]string)
5379
		if *vp == nil {
5380
			*vp = make(map[int]string, decInferLen(containerLen, d.h.MaxInitLen, 24))
5381
		}
5382
		if containerLen != 0 {
5383
			fastpathTV.DecMapIntStringL(*vp, containerLen, d)
5384
		}
5385
	} else if containerLen != 0 {
5386
		fastpathTV.DecMapIntStringL(rv2i(rv).(map[int]string), containerLen, d)
5387
	}
5388
	d.mapEnd()
5389
}
5390
func (f fastpathT) DecMapIntStringX(vp *map[int]string, d *Decoder) {
5391
	containerLen := d.mapStart(d.d.ReadMapStart())
5392
	if containerLen == containerLenNil {
5393
		*vp = nil
5394
	} else {
5395
		if *vp == nil {
5396
			*vp = make(map[int]string, decInferLen(containerLen, d.h.MaxInitLen, 24))
5397
		}
5398
		if containerLen != 0 {
5399
			f.DecMapIntStringL(*vp, containerLen, d)
5400
		}
5401
		d.mapEnd()
5402
	}
5403
}
5404
func (fastpathT) DecMapIntStringL(v map[int]string, containerLen int, d *Decoder) {
5405
	if v == nil {
5406
		d.errorf("cannot decode into nil map[int]string given stream length: %v", containerLen)
5407
		return
5408
	}
5409
	var mk int
5410
	var mv string
5411
	hasLen := containerLen > 0
5412
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5413
		d.mapElemKey()
5414
		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
5415
		d.mapElemValue()
5416
		mv = d.stringZC(d.d.DecodeStringAsBytes())
5417
		v[mk] = mv
5418
	}
5419
}
5420
func (d *Decoder) fastpathDecMapIntBytesR(f *codecFnInfo, rv reflect.Value) {
5421
	containerLen := d.mapStart(d.d.ReadMapStart())
5422
	if rv.Kind() == reflect.Ptr {
5423
		vp, _ := rv2i(rv).(*map[int][]byte)
5424
		if *vp == nil {
5425
			*vp = make(map[int][]byte, decInferLen(containerLen, d.h.MaxInitLen, 32))
5426
		}
5427
		if containerLen != 0 {
5428
			fastpathTV.DecMapIntBytesL(*vp, containerLen, d)
5429
		}
5430
	} else if containerLen != 0 {
5431
		fastpathTV.DecMapIntBytesL(rv2i(rv).(map[int][]byte), containerLen, d)
5432
	}
5433
	d.mapEnd()
5434
}
5435
func (f fastpathT) DecMapIntBytesX(vp *map[int][]byte, d *Decoder) {
5436
	containerLen := d.mapStart(d.d.ReadMapStart())
5437
	if containerLen == containerLenNil {
5438
		*vp = nil
5439
	} else {
5440
		if *vp == nil {
5441
			*vp = make(map[int][]byte, decInferLen(containerLen, d.h.MaxInitLen, 32))
5442
		}
5443
		if containerLen != 0 {
5444
			f.DecMapIntBytesL(*vp, containerLen, d)
5445
		}
5446
		d.mapEnd()
5447
	}
5448
}
5449
func (fastpathT) DecMapIntBytesL(v map[int][]byte, containerLen int, d *Decoder) {
5450
	if v == nil {
5451
		d.errorf("cannot decode into nil map[int][]byte given stream length: %v", containerLen)
5452
		return
5453
	}
5454
	mapGet := v != nil && !d.h.MapValueReset
5455
	var mk int
5456
	var mv []byte
5457
	hasLen := containerLen > 0
5458
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5459
		d.mapElemKey()
5460
		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
5461
		d.mapElemValue()
5462
		if mapGet {
5463
			mv = v[mk]
5464
		} else {
5465
			mv = nil
5466
		}
5467
		mv = d.decodeBytesInto(mv)
5468
		v[mk] = mv
5469
	}
5470
}
5471
func (d *Decoder) fastpathDecMapIntUint8R(f *codecFnInfo, rv reflect.Value) {
5472
	containerLen := d.mapStart(d.d.ReadMapStart())
5473
	if rv.Kind() == reflect.Ptr {
5474
		vp, _ := rv2i(rv).(*map[int]uint8)
5475
		if *vp == nil {
5476
			*vp = make(map[int]uint8, decInferLen(containerLen, d.h.MaxInitLen, 9))
5477
		}
5478
		if containerLen != 0 {
5479
			fastpathTV.DecMapIntUint8L(*vp, containerLen, d)
5480
		}
5481
	} else if containerLen != 0 {
5482
		fastpathTV.DecMapIntUint8L(rv2i(rv).(map[int]uint8), containerLen, d)
5483
	}
5484
	d.mapEnd()
5485
}
5486
func (f fastpathT) DecMapIntUint8X(vp *map[int]uint8, d *Decoder) {
5487
	containerLen := d.mapStart(d.d.ReadMapStart())
5488
	if containerLen == containerLenNil {
5489
		*vp = nil
5490
	} else {
5491
		if *vp == nil {
5492
			*vp = make(map[int]uint8, decInferLen(containerLen, d.h.MaxInitLen, 9))
5493
		}
5494
		if containerLen != 0 {
5495
			f.DecMapIntUint8L(*vp, containerLen, d)
5496
		}
5497
		d.mapEnd()
5498
	}
5499
}
5500
func (fastpathT) DecMapIntUint8L(v map[int]uint8, containerLen int, d *Decoder) {
5501
	if v == nil {
5502
		d.errorf("cannot decode into nil map[int]uint8 given stream length: %v", containerLen)
5503
		return
5504
	}
5505
	var mk int
5506
	var mv uint8
5507
	hasLen := containerLen > 0
5508
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5509
		d.mapElemKey()
5510
		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
5511
		d.mapElemValue()
5512
		mv = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
5513
		v[mk] = mv
5514
	}
5515
}
5516
func (d *Decoder) fastpathDecMapIntUint64R(f *codecFnInfo, rv reflect.Value) {
5517
	containerLen := d.mapStart(d.d.ReadMapStart())
5518
	if rv.Kind() == reflect.Ptr {
5519
		vp, _ := rv2i(rv).(*map[int]uint64)
5520
		if *vp == nil {
5521
			*vp = make(map[int]uint64, decInferLen(containerLen, d.h.MaxInitLen, 16))
5522
		}
5523
		if containerLen != 0 {
5524
			fastpathTV.DecMapIntUint64L(*vp, containerLen, d)
5525
		}
5526
	} else if containerLen != 0 {
5527
		fastpathTV.DecMapIntUint64L(rv2i(rv).(map[int]uint64), containerLen, d)
5528
	}
5529
	d.mapEnd()
5530
}
5531
func (f fastpathT) DecMapIntUint64X(vp *map[int]uint64, d *Decoder) {
5532
	containerLen := d.mapStart(d.d.ReadMapStart())
5533
	if containerLen == containerLenNil {
5534
		*vp = nil
5535
	} else {
5536
		if *vp == nil {
5537
			*vp = make(map[int]uint64, decInferLen(containerLen, d.h.MaxInitLen, 16))
5538
		}
5539
		if containerLen != 0 {
5540
			f.DecMapIntUint64L(*vp, containerLen, d)
5541
		}
5542
		d.mapEnd()
5543
	}
5544
}
5545
func (fastpathT) DecMapIntUint64L(v map[int]uint64, containerLen int, d *Decoder) {
5546
	if v == nil {
5547
		d.errorf("cannot decode into nil map[int]uint64 given stream length: %v", containerLen)
5548
		return
5549
	}
5550
	var mk int
5551
	var mv uint64
5552
	hasLen := containerLen > 0
5553
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5554
		d.mapElemKey()
5555
		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
5556
		d.mapElemValue()
5557
		mv = d.d.DecodeUint64()
5558
		v[mk] = mv
5559
	}
5560
}
5561
func (d *Decoder) fastpathDecMapIntIntR(f *codecFnInfo, rv reflect.Value) {
5562
	containerLen := d.mapStart(d.d.ReadMapStart())
5563
	if rv.Kind() == reflect.Ptr {
5564
		vp, _ := rv2i(rv).(*map[int]int)
5565
		if *vp == nil {
5566
			*vp = make(map[int]int, decInferLen(containerLen, d.h.MaxInitLen, 16))
5567
		}
5568
		if containerLen != 0 {
5569
			fastpathTV.DecMapIntIntL(*vp, containerLen, d)
5570
		}
5571
	} else if containerLen != 0 {
5572
		fastpathTV.DecMapIntIntL(rv2i(rv).(map[int]int), containerLen, d)
5573
	}
5574
	d.mapEnd()
5575
}
5576
func (f fastpathT) DecMapIntIntX(vp *map[int]int, d *Decoder) {
5577
	containerLen := d.mapStart(d.d.ReadMapStart())
5578
	if containerLen == containerLenNil {
5579
		*vp = nil
5580
	} else {
5581
		if *vp == nil {
5582
			*vp = make(map[int]int, decInferLen(containerLen, d.h.MaxInitLen, 16))
5583
		}
5584
		if containerLen != 0 {
5585
			f.DecMapIntIntL(*vp, containerLen, d)
5586
		}
5587
		d.mapEnd()
5588
	}
5589
}
5590
func (fastpathT) DecMapIntIntL(v map[int]int, containerLen int, d *Decoder) {
5591
	if v == nil {
5592
		d.errorf("cannot decode into nil map[int]int given stream length: %v", containerLen)
5593
		return
5594
	}
5595
	var mk int
5596
	var mv int
5597
	hasLen := containerLen > 0
5598
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5599
		d.mapElemKey()
5600
		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
5601
		d.mapElemValue()
5602
		mv = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
5603
		v[mk] = mv
5604
	}
5605
}
5606
func (d *Decoder) fastpathDecMapIntInt32R(f *codecFnInfo, rv reflect.Value) {
5607
	containerLen := d.mapStart(d.d.ReadMapStart())
5608
	if rv.Kind() == reflect.Ptr {
5609
		vp, _ := rv2i(rv).(*map[int]int32)
5610
		if *vp == nil {
5611
			*vp = make(map[int]int32, decInferLen(containerLen, d.h.MaxInitLen, 12))
5612
		}
5613
		if containerLen != 0 {
5614
			fastpathTV.DecMapIntInt32L(*vp, containerLen, d)
5615
		}
5616
	} else if containerLen != 0 {
5617
		fastpathTV.DecMapIntInt32L(rv2i(rv).(map[int]int32), containerLen, d)
5618
	}
5619
	d.mapEnd()
5620
}
5621
func (f fastpathT) DecMapIntInt32X(vp *map[int]int32, d *Decoder) {
5622
	containerLen := d.mapStart(d.d.ReadMapStart())
5623
	if containerLen == containerLenNil {
5624
		*vp = nil
5625
	} else {
5626
		if *vp == nil {
5627
			*vp = make(map[int]int32, decInferLen(containerLen, d.h.MaxInitLen, 12))
5628
		}
5629
		if containerLen != 0 {
5630
			f.DecMapIntInt32L(*vp, containerLen, d)
5631
		}
5632
		d.mapEnd()
5633
	}
5634
}
5635
func (fastpathT) DecMapIntInt32L(v map[int]int32, containerLen int, d *Decoder) {
5636
	if v == nil {
5637
		d.errorf("cannot decode into nil map[int]int32 given stream length: %v", containerLen)
5638
		return
5639
	}
5640
	var mk int
5641
	var mv int32
5642
	hasLen := containerLen > 0
5643
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5644
		d.mapElemKey()
5645
		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
5646
		d.mapElemValue()
5647
		mv = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
5648
		v[mk] = mv
5649
	}
5650
}
5651
func (d *Decoder) fastpathDecMapIntFloat64R(f *codecFnInfo, rv reflect.Value) {
5652
	containerLen := d.mapStart(d.d.ReadMapStart())
5653
	if rv.Kind() == reflect.Ptr {
5654
		vp, _ := rv2i(rv).(*map[int]float64)
5655
		if *vp == nil {
5656
			*vp = make(map[int]float64, decInferLen(containerLen, d.h.MaxInitLen, 16))
5657
		}
5658
		if containerLen != 0 {
5659
			fastpathTV.DecMapIntFloat64L(*vp, containerLen, d)
5660
		}
5661
	} else if containerLen != 0 {
5662
		fastpathTV.DecMapIntFloat64L(rv2i(rv).(map[int]float64), containerLen, d)
5663
	}
5664
	d.mapEnd()
5665
}
5666
func (f fastpathT) DecMapIntFloat64X(vp *map[int]float64, d *Decoder) {
5667
	containerLen := d.mapStart(d.d.ReadMapStart())
5668
	if containerLen == containerLenNil {
5669
		*vp = nil
5670
	} else {
5671
		if *vp == nil {
5672
			*vp = make(map[int]float64, decInferLen(containerLen, d.h.MaxInitLen, 16))
5673
		}
5674
		if containerLen != 0 {
5675
			f.DecMapIntFloat64L(*vp, containerLen, d)
5676
		}
5677
		d.mapEnd()
5678
	}
5679
}
5680
func (fastpathT) DecMapIntFloat64L(v map[int]float64, containerLen int, d *Decoder) {
5681
	if v == nil {
5682
		d.errorf("cannot decode into nil map[int]float64 given stream length: %v", containerLen)
5683
		return
5684
	}
5685
	var mk int
5686
	var mv float64
5687
	hasLen := containerLen > 0
5688
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5689
		d.mapElemKey()
5690
		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
5691
		d.mapElemValue()
5692
		mv = d.d.DecodeFloat64()
5693
		v[mk] = mv
5694
	}
5695
}
5696
func (d *Decoder) fastpathDecMapIntBoolR(f *codecFnInfo, rv reflect.Value) {
5697
	containerLen := d.mapStart(d.d.ReadMapStart())
5698
	if rv.Kind() == reflect.Ptr {
5699
		vp, _ := rv2i(rv).(*map[int]bool)
5700
		if *vp == nil {
5701
			*vp = make(map[int]bool, decInferLen(containerLen, d.h.MaxInitLen, 9))
5702
		}
5703
		if containerLen != 0 {
5704
			fastpathTV.DecMapIntBoolL(*vp, containerLen, d)
5705
		}
5706
	} else if containerLen != 0 {
5707
		fastpathTV.DecMapIntBoolL(rv2i(rv).(map[int]bool), containerLen, d)
5708
	}
5709
	d.mapEnd()
5710
}
5711
func (f fastpathT) DecMapIntBoolX(vp *map[int]bool, d *Decoder) {
5712
	containerLen := d.mapStart(d.d.ReadMapStart())
5713
	if containerLen == containerLenNil {
5714
		*vp = nil
5715
	} else {
5716
		if *vp == nil {
5717
			*vp = make(map[int]bool, decInferLen(containerLen, d.h.MaxInitLen, 9))
5718
		}
5719
		if containerLen != 0 {
5720
			f.DecMapIntBoolL(*vp, containerLen, d)
5721
		}
5722
		d.mapEnd()
5723
	}
5724
}
5725
func (fastpathT) DecMapIntBoolL(v map[int]bool, containerLen int, d *Decoder) {
5726
	if v == nil {
5727
		d.errorf("cannot decode into nil map[int]bool given stream length: %v", containerLen)
5728
		return
5729
	}
5730
	var mk int
5731
	var mv bool
5732
	hasLen := containerLen > 0
5733
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5734
		d.mapElemKey()
5735
		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
5736
		d.mapElemValue()
5737
		mv = d.d.DecodeBool()
5738
		v[mk] = mv
5739
	}
5740
}
5741
func (d *Decoder) fastpathDecMapInt32IntfR(f *codecFnInfo, rv reflect.Value) {
5742
	containerLen := d.mapStart(d.d.ReadMapStart())
5743
	if rv.Kind() == reflect.Ptr {
5744
		vp, _ := rv2i(rv).(*map[int32]interface{})
5745
		if *vp == nil {
5746
			*vp = make(map[int32]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 20))
5747
		}
5748
		if containerLen != 0 {
5749
			fastpathTV.DecMapInt32IntfL(*vp, containerLen, d)
5750
		}
5751
	} else if containerLen != 0 {
5752
		fastpathTV.DecMapInt32IntfL(rv2i(rv).(map[int32]interface{}), containerLen, d)
5753
	}
5754
	d.mapEnd()
5755
}
5756
func (f fastpathT) DecMapInt32IntfX(vp *map[int32]interface{}, d *Decoder) {
5757
	containerLen := d.mapStart(d.d.ReadMapStart())
5758
	if containerLen == containerLenNil {
5759
		*vp = nil
5760
	} else {
5761
		if *vp == nil {
5762
			*vp = make(map[int32]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 20))
5763
		}
5764
		if containerLen != 0 {
5765
			f.DecMapInt32IntfL(*vp, containerLen, d)
5766
		}
5767
		d.mapEnd()
5768
	}
5769
}
5770
func (fastpathT) DecMapInt32IntfL(v map[int32]interface{}, containerLen int, d *Decoder) {
5771
	if v == nil {
5772
		d.errorf("cannot decode into nil map[int32]interface{} given stream length: %v", containerLen)
5773
		return
5774
	}
5775
	mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset
5776
	var mk int32
5777
	var mv interface{}
5778
	hasLen := containerLen > 0
5779
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5780
		d.mapElemKey()
5781
		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
5782
		d.mapElemValue()
5783
		if mapGet {
5784
			mv = v[mk]
5785
		} else {
5786
			mv = nil
5787
		}
5788
		d.decode(&mv)
5789
		v[mk] = mv
5790
	}
5791
}
5792
func (d *Decoder) fastpathDecMapInt32StringR(f *codecFnInfo, rv reflect.Value) {
5793
	containerLen := d.mapStart(d.d.ReadMapStart())
5794
	if rv.Kind() == reflect.Ptr {
5795
		vp, _ := rv2i(rv).(*map[int32]string)
5796
		if *vp == nil {
5797
			*vp = make(map[int32]string, decInferLen(containerLen, d.h.MaxInitLen, 20))
5798
		}
5799
		if containerLen != 0 {
5800
			fastpathTV.DecMapInt32StringL(*vp, containerLen, d)
5801
		}
5802
	} else if containerLen != 0 {
5803
		fastpathTV.DecMapInt32StringL(rv2i(rv).(map[int32]string), containerLen, d)
5804
	}
5805
	d.mapEnd()
5806
}
5807
func (f fastpathT) DecMapInt32StringX(vp *map[int32]string, d *Decoder) {
5808
	containerLen := d.mapStart(d.d.ReadMapStart())
5809
	if containerLen == containerLenNil {
5810
		*vp = nil
5811
	} else {
5812
		if *vp == nil {
5813
			*vp = make(map[int32]string, decInferLen(containerLen, d.h.MaxInitLen, 20))
5814
		}
5815
		if containerLen != 0 {
5816
			f.DecMapInt32StringL(*vp, containerLen, d)
5817
		}
5818
		d.mapEnd()
5819
	}
5820
}
5821
func (fastpathT) DecMapInt32StringL(v map[int32]string, containerLen int, d *Decoder) {
5822
	if v == nil {
5823
		d.errorf("cannot decode into nil map[int32]string given stream length: %v", containerLen)
5824
		return
5825
	}
5826
	var mk int32
5827
	var mv string
5828
	hasLen := containerLen > 0
5829
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5830
		d.mapElemKey()
5831
		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
5832
		d.mapElemValue()
5833
		mv = d.stringZC(d.d.DecodeStringAsBytes())
5834
		v[mk] = mv
5835
	}
5836
}
5837
func (d *Decoder) fastpathDecMapInt32BytesR(f *codecFnInfo, rv reflect.Value) {
5838
	containerLen := d.mapStart(d.d.ReadMapStart())
5839
	if rv.Kind() == reflect.Ptr {
5840
		vp, _ := rv2i(rv).(*map[int32][]byte)
5841
		if *vp == nil {
5842
			*vp = make(map[int32][]byte, decInferLen(containerLen, d.h.MaxInitLen, 28))
5843
		}
5844
		if containerLen != 0 {
5845
			fastpathTV.DecMapInt32BytesL(*vp, containerLen, d)
5846
		}
5847
	} else if containerLen != 0 {
5848
		fastpathTV.DecMapInt32BytesL(rv2i(rv).(map[int32][]byte), containerLen, d)
5849
	}
5850
	d.mapEnd()
5851
}
5852
func (f fastpathT) DecMapInt32BytesX(vp *map[int32][]byte, d *Decoder) {
5853
	containerLen := d.mapStart(d.d.ReadMapStart())
5854
	if containerLen == containerLenNil {
5855
		*vp = nil
5856
	} else {
5857
		if *vp == nil {
5858
			*vp = make(map[int32][]byte, decInferLen(containerLen, d.h.MaxInitLen, 28))
5859
		}
5860
		if containerLen != 0 {
5861
			f.DecMapInt32BytesL(*vp, containerLen, d)
5862
		}
5863
		d.mapEnd()
5864
	}
5865
}
5866
func (fastpathT) DecMapInt32BytesL(v map[int32][]byte, containerLen int, d *Decoder) {
5867
	if v == nil {
5868
		d.errorf("cannot decode into nil map[int32][]byte given stream length: %v", containerLen)
5869
		return
5870
	}
5871
	mapGet := v != nil && !d.h.MapValueReset
5872
	var mk int32
5873
	var mv []byte
5874
	hasLen := containerLen > 0
5875
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5876
		d.mapElemKey()
5877
		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
5878
		d.mapElemValue()
5879
		if mapGet {
5880
			mv = v[mk]
5881
		} else {
5882
			mv = nil
5883
		}
5884
		mv = d.decodeBytesInto(mv)
5885
		v[mk] = mv
5886
	}
5887
}
5888
func (d *Decoder) fastpathDecMapInt32Uint8R(f *codecFnInfo, rv reflect.Value) {
5889
	containerLen := d.mapStart(d.d.ReadMapStart())
5890
	if rv.Kind() == reflect.Ptr {
5891
		vp, _ := rv2i(rv).(*map[int32]uint8)
5892
		if *vp == nil {
5893
			*vp = make(map[int32]uint8, decInferLen(containerLen, d.h.MaxInitLen, 5))
5894
		}
5895
		if containerLen != 0 {
5896
			fastpathTV.DecMapInt32Uint8L(*vp, containerLen, d)
5897
		}
5898
	} else if containerLen != 0 {
5899
		fastpathTV.DecMapInt32Uint8L(rv2i(rv).(map[int32]uint8), containerLen, d)
5900
	}
5901
	d.mapEnd()
5902
}
5903
func (f fastpathT) DecMapInt32Uint8X(vp *map[int32]uint8, d *Decoder) {
5904
	containerLen := d.mapStart(d.d.ReadMapStart())
5905
	if containerLen == containerLenNil {
5906
		*vp = nil
5907
	} else {
5908
		if *vp == nil {
5909
			*vp = make(map[int32]uint8, decInferLen(containerLen, d.h.MaxInitLen, 5))
5910
		}
5911
		if containerLen != 0 {
5912
			f.DecMapInt32Uint8L(*vp, containerLen, d)
5913
		}
5914
		d.mapEnd()
5915
	}
5916
}
5917
func (fastpathT) DecMapInt32Uint8L(v map[int32]uint8, containerLen int, d *Decoder) {
5918
	if v == nil {
5919
		d.errorf("cannot decode into nil map[int32]uint8 given stream length: %v", containerLen)
5920
		return
5921
	}
5922
	var mk int32
5923
	var mv uint8
5924
	hasLen := containerLen > 0
5925
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5926
		d.mapElemKey()
5927
		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
5928
		d.mapElemValue()
5929
		mv = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
5930
		v[mk] = mv
5931
	}
5932
}
5933
func (d *Decoder) fastpathDecMapInt32Uint64R(f *codecFnInfo, rv reflect.Value) {
5934
	containerLen := d.mapStart(d.d.ReadMapStart())
5935
	if rv.Kind() == reflect.Ptr {
5936
		vp, _ := rv2i(rv).(*map[int32]uint64)
5937
		if *vp == nil {
5938
			*vp = make(map[int32]uint64, decInferLen(containerLen, d.h.MaxInitLen, 12))
5939
		}
5940
		if containerLen != 0 {
5941
			fastpathTV.DecMapInt32Uint64L(*vp, containerLen, d)
5942
		}
5943
	} else if containerLen != 0 {
5944
		fastpathTV.DecMapInt32Uint64L(rv2i(rv).(map[int32]uint64), containerLen, d)
5945
	}
5946
	d.mapEnd()
5947
}
5948
func (f fastpathT) DecMapInt32Uint64X(vp *map[int32]uint64, d *Decoder) {
5949
	containerLen := d.mapStart(d.d.ReadMapStart())
5950
	if containerLen == containerLenNil {
5951
		*vp = nil
5952
	} else {
5953
		if *vp == nil {
5954
			*vp = make(map[int32]uint64, decInferLen(containerLen, d.h.MaxInitLen, 12))
5955
		}
5956
		if containerLen != 0 {
5957
			f.DecMapInt32Uint64L(*vp, containerLen, d)
5958
		}
5959
		d.mapEnd()
5960
	}
5961
}
5962
func (fastpathT) DecMapInt32Uint64L(v map[int32]uint64, containerLen int, d *Decoder) {
5963
	if v == nil {
5964
		d.errorf("cannot decode into nil map[int32]uint64 given stream length: %v", containerLen)
5965
		return
5966
	}
5967
	var mk int32
5968
	var mv uint64
5969
	hasLen := containerLen > 0
5970
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
5971
		d.mapElemKey()
5972
		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
5973
		d.mapElemValue()
5974
		mv = d.d.DecodeUint64()
5975
		v[mk] = mv
5976
	}
5977
}
5978
func (d *Decoder) fastpathDecMapInt32IntR(f *codecFnInfo, rv reflect.Value) {
5979
	containerLen := d.mapStart(d.d.ReadMapStart())
5980
	if rv.Kind() == reflect.Ptr {
5981
		vp, _ := rv2i(rv).(*map[int32]int)
5982
		if *vp == nil {
5983
			*vp = make(map[int32]int, decInferLen(containerLen, d.h.MaxInitLen, 12))
5984
		}
5985
		if containerLen != 0 {
5986
			fastpathTV.DecMapInt32IntL(*vp, containerLen, d)
5987
		}
5988
	} else if containerLen != 0 {
5989
		fastpathTV.DecMapInt32IntL(rv2i(rv).(map[int32]int), containerLen, d)
5990
	}
5991
	d.mapEnd()
5992
}
5993
func (f fastpathT) DecMapInt32IntX(vp *map[int32]int, d *Decoder) {
5994
	containerLen := d.mapStart(d.d.ReadMapStart())
5995
	if containerLen == containerLenNil {
5996
		*vp = nil
5997
	} else {
5998
		if *vp == nil {
5999
			*vp = make(map[int32]int, decInferLen(containerLen, d.h.MaxInitLen, 12))
6000
		}
6001
		if containerLen != 0 {
6002
			f.DecMapInt32IntL(*vp, containerLen, d)
6003
		}
6004
		d.mapEnd()
6005
	}
6006
}
6007
func (fastpathT) DecMapInt32IntL(v map[int32]int, containerLen int, d *Decoder) {
6008
	if v == nil {
6009
		d.errorf("cannot decode into nil map[int32]int given stream length: %v", containerLen)
6010
		return
6011
	}
6012
	var mk int32
6013
	var mv int
6014
	hasLen := containerLen > 0
6015
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
6016
		d.mapElemKey()
6017
		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
6018
		d.mapElemValue()
6019
		mv = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
6020
		v[mk] = mv
6021
	}
6022
}
6023
func (d *Decoder) fastpathDecMapInt32Int32R(f *codecFnInfo, rv reflect.Value) {
6024
	containerLen := d.mapStart(d.d.ReadMapStart())
6025
	if rv.Kind() == reflect.Ptr {
6026
		vp, _ := rv2i(rv).(*map[int32]int32)
6027
		if *vp == nil {
6028
			*vp = make(map[int32]int32, decInferLen(containerLen, d.h.MaxInitLen, 8))
6029
		}
6030
		if containerLen != 0 {
6031
			fastpathTV.DecMapInt32Int32L(*vp, containerLen, d)
6032
		}
6033
	} else if containerLen != 0 {
6034
		fastpathTV.DecMapInt32Int32L(rv2i(rv).(map[int32]int32), containerLen, d)
6035
	}
6036
	d.mapEnd()
6037
}
6038
func (f fastpathT) DecMapInt32Int32X(vp *map[int32]int32, d *Decoder) {
6039
	containerLen := d.mapStart(d.d.ReadMapStart())
6040
	if containerLen == containerLenNil {
6041
		*vp = nil
6042
	} else {
6043
		if *vp == nil {
6044
			*vp = make(map[int32]int32, decInferLen(containerLen, d.h.MaxInitLen, 8))
6045
		}
6046
		if containerLen != 0 {
6047
			f.DecMapInt32Int32L(*vp, containerLen, d)
6048
		}
6049
		d.mapEnd()
6050
	}
6051
}
6052
func (fastpathT) DecMapInt32Int32L(v map[int32]int32, containerLen int, d *Decoder) {
6053
	if v == nil {
6054
		d.errorf("cannot decode into nil map[int32]int32 given stream length: %v", containerLen)
6055
		return
6056
	}
6057
	var mk int32
6058
	var mv int32
6059
	hasLen := containerLen > 0
6060
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
6061
		d.mapElemKey()
6062
		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
6063
		d.mapElemValue()
6064
		mv = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
6065
		v[mk] = mv
6066
	}
6067
}
6068
func (d *Decoder) fastpathDecMapInt32Float64R(f *codecFnInfo, rv reflect.Value) {
6069
	containerLen := d.mapStart(d.d.ReadMapStart())
6070
	if rv.Kind() == reflect.Ptr {
6071
		vp, _ := rv2i(rv).(*map[int32]float64)
6072
		if *vp == nil {
6073
			*vp = make(map[int32]float64, decInferLen(containerLen, d.h.MaxInitLen, 12))
6074
		}
6075
		if containerLen != 0 {
6076
			fastpathTV.DecMapInt32Float64L(*vp, containerLen, d)
6077
		}
6078
	} else if containerLen != 0 {
6079
		fastpathTV.DecMapInt32Float64L(rv2i(rv).(map[int32]float64), containerLen, d)
6080
	}
6081
	d.mapEnd()
6082
}
6083
func (f fastpathT) DecMapInt32Float64X(vp *map[int32]float64, d *Decoder) {
6084
	containerLen := d.mapStart(d.d.ReadMapStart())
6085
	if containerLen == containerLenNil {
6086
		*vp = nil
6087
	} else {
6088
		if *vp == nil {
6089
			*vp = make(map[int32]float64, decInferLen(containerLen, d.h.MaxInitLen, 12))
6090
		}
6091
		if containerLen != 0 {
6092
			f.DecMapInt32Float64L(*vp, containerLen, d)
6093
		}
6094
		d.mapEnd()
6095
	}
6096
}
6097
func (fastpathT) DecMapInt32Float64L(v map[int32]float64, containerLen int, d *Decoder) {
6098
	if v == nil {
6099
		d.errorf("cannot decode into nil map[int32]float64 given stream length: %v", containerLen)
6100
		return
6101
	}
6102
	var mk int32
6103
	var mv float64
6104
	hasLen := containerLen > 0
6105
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
6106
		d.mapElemKey()
6107
		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
6108
		d.mapElemValue()
6109
		mv = d.d.DecodeFloat64()
6110
		v[mk] = mv
6111
	}
6112
}
6113
func (d *Decoder) fastpathDecMapInt32BoolR(f *codecFnInfo, rv reflect.Value) {
6114
	containerLen := d.mapStart(d.d.ReadMapStart())
6115
	if rv.Kind() == reflect.Ptr {
6116
		vp, _ := rv2i(rv).(*map[int32]bool)
6117
		if *vp == nil {
6118
			*vp = make(map[int32]bool, decInferLen(containerLen, d.h.MaxInitLen, 5))
6119
		}
6120
		if containerLen != 0 {
6121
			fastpathTV.DecMapInt32BoolL(*vp, containerLen, d)
6122
		}
6123
	} else if containerLen != 0 {
6124
		fastpathTV.DecMapInt32BoolL(rv2i(rv).(map[int32]bool), containerLen, d)
6125
	}
6126
	d.mapEnd()
6127
}
6128
func (f fastpathT) DecMapInt32BoolX(vp *map[int32]bool, d *Decoder) {
6129
	containerLen := d.mapStart(d.d.ReadMapStart())
6130
	if containerLen == containerLenNil {
6131
		*vp = nil
6132
	} else {
6133
		if *vp == nil {
6134
			*vp = make(map[int32]bool, decInferLen(containerLen, d.h.MaxInitLen, 5))
6135
		}
6136
		if containerLen != 0 {
6137
			f.DecMapInt32BoolL(*vp, containerLen, d)
6138
		}
6139
		d.mapEnd()
6140
	}
6141
}
6142
func (fastpathT) DecMapInt32BoolL(v map[int32]bool, containerLen int, d *Decoder) {
6143
	if v == nil {
6144
		d.errorf("cannot decode into nil map[int32]bool given stream length: %v", containerLen)
6145
		return
6146
	}
6147
	var mk int32
6148
	var mv bool
6149
	hasLen := containerLen > 0
6150
	for j := 0; d.containerNext(j, containerLen, hasLen); j++ {
6151
		d.mapElemKey()
6152
		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
6153
		d.mapElemValue()
6154
		mv = d.d.DecodeBool()
6155
		v[mk] = mv
6156
	}
6157
}
6158

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.