delta is delta on map size
(raw []byte, delta int64)
| 187 | |
| 188 | // delta is delta on map size |
| 189 | func 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 | } |
no test coverage detected
searching dependent graphs…