(b []byte, p unsafe.Pointer, size uintptr, t reflect.Type, decode decodeFunc)
| 217 | var empty struct{} |
| 218 | |
| 219 | func (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 | } |
| 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 { |
no test coverage detected