MCPcopy
hub / github.com/tinylib/msgp / resizeMap

Function resizeMap

msgp/edit.go:189–242  ·  view source on GitHub ↗

delta is delta on map size

(raw []byte, delta int64)

Source from the content-addressed store, hash-verified

187
188// delta is delta on map size
189func resizeMap(raw []byte, delta int64) []byte {
190 var sz int64
191 switch raw[0] {
192 case mmap16:
193 sz = int64(big.Uint16(raw[1:]))
194 if sz+delta <= math.MaxUint16 {
195 big.PutUint16(raw[1:], uint16(sz+delta))
196 return raw
197 }
198 if cap(raw)-len(raw) >= 2 {
199 raw = raw[0 : len(raw)+2]
200 copy(raw[5:], raw[3:])
201 raw[0] = mmap32
202 big.PutUint32(raw[1:], uint32(sz+delta))
203 return raw
204 }
205 n := make([]byte, 0, len(raw)+5)
206 n = AppendMapHeader(n, uint32(sz+delta))
207 return append(n, raw[3:]...)
208
209 case mmap32:
210 sz = int64(big.Uint32(raw[1:]))
211 big.PutUint32(raw[1:], uint32(sz+delta))
212 return raw
213
214 default:
215 sz = int64(rfixmap(raw[0]))
216 if sz+delta < 16 {
217 raw[0] = wfixmap(uint8(sz + delta))
218 return raw
219 } else if sz+delta <= math.MaxUint16 {
220 if cap(raw)-len(raw) >= 2 {
221 raw = raw[0 : len(raw)+2]
222 copy(raw[3:], raw[1:])
223 raw[0] = mmap16
224 big.PutUint16(raw[1:], uint16(sz+delta))
225 return raw
226 }
227 n := make([]byte, 0, len(raw)+5)
228 n = AppendMapHeader(n, uint32(sz+delta))
229 return append(n, raw[1:]...)
230 }
231 if cap(raw)-len(raw) >= 4 {
232 raw = raw[0 : len(raw)+4]
233 copy(raw[5:], raw[1:])
234 raw[0] = mmap32
235 big.PutUint32(raw[1:], uint32(sz+delta))
236 return raw
237 }
238 n := make([]byte, 0, len(raw)+5)
239 n = AppendMapHeader(n, uint32(sz+delta))
240 return append(n, raw[1:]...)
241 }
242}

Callers 1

RemoveFunction · 0.85

Calls 3

AppendMapHeaderFunction · 0.85
rfixmapFunction · 0.85
wfixmapFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…