( size uint, offset uint, result addressableValue, depth int, )
| 775 | } |
| 776 | |
| 777 | func (d *ReflectionDecoder) decodeMap( |
| 778 | size uint, |
| 779 | offset uint, |
| 780 | result addressableValue, |
| 781 | depth int, |
| 782 | ) (uint, error) { |
| 783 | if result.IsNil() { |
| 784 | result.Set(reflect.MakeMapWithSize(result.Type(), int(size))) |
| 785 | } |
| 786 | |
| 787 | mapType := result.Type() |
| 788 | |
| 789 | // Pre-allocated values for efficient reuse |
| 790 | keyVal := reflect.New(mapType.Key()).Elem() |
| 791 | keyValue := addressableValue{Value: keyVal} |
| 792 | elemType := mapType.Elem() |
| 793 | var elemValue addressableValue |
| 794 | // Pre-allocate element value to reduce allocations |
| 795 | elemVal := reflect.New(elemType).Elem() |
| 796 | elemValue = addressableValue{Value: elemVal} |
| 797 | for range size { |
| 798 | var err error |
| 799 | |
| 800 | // Reuse keyValue by zeroing it |
| 801 | keyValue.SetZero() |
| 802 | offset, err = d.decodeValue(offset, keyValue, depth) |
| 803 | if err != nil { |
| 804 | return 0, err |
| 805 | } |
| 806 | |
| 807 | // Reuse elemValue by zeroing it |
| 808 | elemValue.SetZero() |
| 809 | |
| 810 | offset, err = d.decodeValue(offset, elemValue, depth) |
| 811 | if err != nil { |
| 812 | return 0, d.wrapErrorWithMapKey(err, keyValue.String()) |
| 813 | } |
| 814 | |
| 815 | result.SetMapIndex(keyValue.Value, elemValue.Value) |
| 816 | } |
| 817 | return offset, nil |
| 818 | } |
| 819 | |
| 820 | func (d *ReflectionDecoder) decodeSlice( |
| 821 | size uint, |
no test coverage detected