MCPcopy
hub / github.com/uptrace/uptrace / decodeMap

Method decodeMap

pkg/msgp/decoder.go:246–279  ·  view source on GitHub ↗
(b []byte, p unsafe.Pointer, t, kt, vt reflect.Type, kz, vz reflect.Value, decodeKey, decodeValue decodeFunc)

Source from the content-addressed store, hash-verified

244 return b, nil
245}
246func (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}
280func (d decoder) decodeMapInterfaceInterface(b []byte, p unsafe.Pointer) ([]byte, error) {
281 m, b, err := ParseMapAnyAny(b, d.flags)
282 if err != nil {

Callers 1

createMapDecodeFuncFunction · 0.80

Calls 3

ParseMapLenFunction · 0.85
PointerMethod · 0.80
SetMethod · 0.80

Tested by

no test coverage detected