MCPcopy Create free account
hub / github.com/oschwald/maxminddb-golang / decodeMap

Method decodeMap

internal/decoder/reflection.go:777–818  ·  view source on GitHub ↗
(
	size uint,
	offset uint,
	result addressableValue,
	depth int,
)

Source from the content-addressed store, hash-verified

775}
776
777func (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
820func (d *ReflectionDecoder) decodeSlice(
821 size uint,

Callers 1

unmarshalMapMethod · 0.95

Calls 3

decodeValueMethod · 0.95
wrapErrorWithMapKeyMethod · 0.95
StringMethod · 0.80

Tested by

no test coverage detected