MCPcopy
hub / github.com/uptrace/uptrace / decodeSlice

Method decodeSlice

pkg/msgp/decoder.go:219–245  ·  view source on GitHub ↗
(b []byte, p unsafe.Pointer, size uintptr, t reflect.Type, decode decodeFunc)

Source from the content-addressed store, hash-verified

217var empty struct{}
218
219func (d decoder) decodeSlice(b []byte, p unsafe.Pointer, size uintptr, t reflect.Type, decode decodeFunc) ([]byte, error) {
220 ln, b, err := ParseArrayLen(b)
221 if err != nil {
222 return b, err
223 }
224 s := (*slice)(p)
225 s.len = 0
226 switch ln {
227 case -1:
228 s.data = nil
229 return b, nil
230 case 0:
231 s.data = unsafe.Pointer(&empty)
232 return b, nil
233 }
234 if s.cap < ln {
235 *s = extendSlice(t, s, ln)
236 }
237 for i := 0; i < ln; i++ {
238 b, err = decode(d, b, unsafe.Pointer(uintptr(s.data)+(uintptr(s.len)*size)))
239 if err != nil {
240 return b, err
241 }
242 s.len++
243 }
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 {

Callers 1

createSliceDecodeFuncFunction · 0.80

Calls 3

ParseArrayLenFunction · 0.85
extendSliceFunction · 0.85
PointerMethod · 0.80

Tested by

no test coverage detected