fast-path.generated.go (157984B)
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 }