(b []byte, p unsafe.Pointer, t, kt, vt reflect.Type, kz, vz reflect.Value, decodeKey, decodeValue decodeFunc)
| 244 | return b, nil |
| 245 | } |
| 246 | func (d decoder) decodeMap(b []byte, p unsafe.Pointer, t, kt, vt reflect.Type, kz, vz reflect.Value, decodeKey, decodeValue decodeFunc) ([]byte, error) { |
| 247 | ln, b, err := ParseMapLen(b) |
| 248 | if err != nil { |
| 249 | return b, err |
| 250 | } |
| 251 | if ln == -1 { |
| 252 | *(*unsafe.Pointer)(p) = nil |
| 253 | return b, nil |
| 254 | } |
| 255 | m := reflect.NewAt(t, p).Elem() |
| 256 | if m.IsNil() { |
| 257 | m = reflect.MakeMap(t) |
| 258 | *(*unsafe.Pointer)(p) = unsafe.Pointer(m.Pointer()) |
| 259 | } |
| 260 | if ln == 0 { |
| 261 | return b, nil |
| 262 | } |
| 263 | k := reflect.New(kt).Elem() |
| 264 | v := reflect.New(vt).Elem() |
| 265 | kptr := (*eface)(unsafe.Pointer(&k)).ptr |
| 266 | vptr := (*eface)(unsafe.Pointer(&v)).ptr |
| 267 | for i := 0; i < ln; i++ { |
| 268 | k.Set(kz) |
| 269 | v.Set(vz) |
| 270 | if b, err = decodeKey(d, b, kptr); err != nil { |
| 271 | return b, err |
| 272 | } |
| 273 | if b, err = decodeValue(d, b, vptr); err != nil { |
| 274 | return b, err |
| 275 | } |
| 276 | m.SetMapIndex(k, v) |
| 277 | } |
| 278 | return b, nil |
| 279 | } |
| 280 | func (d decoder) decodeMapInterfaceInterface(b []byte, p unsafe.Pointer) ([]byte, error) { |
| 281 | m, b, err := ParseMapAnyAny(b, d.flags) |
| 282 | if err != nil { |
no test coverage detected