MCPcopy Create free account
hub / github.com/segmentio/encoding / mapEncodeFuncOf

Function mapEncodeFuncOf

proto/map.go:81–201  ·  view source on GitHub ↗
(t reflect.Type, f *mapField)

Source from the content-addressed store, hash-verified

79}
80
81func mapEncodeFuncOf(t reflect.Type, f *mapField) encodeFunc {
82 keyTag := [1]byte{}
83 valTag := [1]byte{}
84 encodeTag(keyTag[:], 1, f.keyCodec.wire)
85 encodeTag(valTag[:], 2, f.valCodec.wire)
86
87 number := fieldNumber(f.number)
88 mapTag := make([]byte, sizeOfTag(number, varlen)+zeroSize)
89 encodeTag(mapTag, number, varlen)
90
91 zero := mapTag
92 mapTag = mapTag[:len(mapTag)-1]
93
94 return func(b []byte, p unsafe.Pointer, flags flags) (int, error) {
95 if p == nil {
96 return 0, nil
97 }
98
99 if !flags.has(inline) {
100 p = *(*unsafe.Pointer)(p)
101 }
102
103 offset := 0
104 m := MapIter{}
105 defer m.Done()
106
107 for m.Init(pointer(t), p); m.HasNext(); m.Next() {
108 key := m.Key()
109 val := m.Value()
110
111 keySize := f.keyCodec.size(key, wantzero)
112 valSize := f.valCodec.size(val, wantzero)
113 elemSize := keySize + valSize
114
115 if keySize > 0 {
116 elemSize += len(keyTag)
117 if (f.keyFlags & embedded) != 0 {
118 elemSize += sizeOfVarint(uint64(keySize))
119 }
120 }
121
122 if valSize > 0 {
123 elemSize += len(valTag)
124 if (f.valFlags & embedded) != 0 {
125 elemSize += sizeOfVarint(uint64(valSize))
126 }
127 }
128
129 n := copy(b[offset:], mapTag)
130 offset += n
131 if n < len(mapTag) {
132 return offset, io.ErrShortBuffer
133 }
134 n, err := encodeVarint(b[offset:], uint64(elemSize))
135 offset += n
136 if err != nil {
137 return offset, err
138 }

Callers 1

mapCodecOfFunction · 0.85

Calls 14

DoneMethod · 0.95
InitMethod · 0.95
HasNextMethod · 0.95
NextMethod · 0.95
KeyMethod · 0.95
ValueMethod · 0.95
encodeTagFunction · 0.85
fieldNumberTypeAlias · 0.85
sizeOfTagFunction · 0.85
pointerFunction · 0.85
sizeOfVarintFunction · 0.85
encodeVarintFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…