diff options
Diffstat (limited to 'src/encoding/binary/varint.go')
| -rw-r--r-- | src/encoding/binary/varint.go | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/encoding/binary/varint.go b/src/encoding/binary/varint.go index 1b07e2541d..c807d15f44 100644 --- a/src/encoding/binary/varint.go +++ b/src/encoding/binary/varint.go @@ -36,6 +36,16 @@ const ( MaxVarintLen64 = 10 ) +// AppendUvarint appends the varint-encoded form of x, +// as generated by PutUvarint, to buf and returns the extended buffer. +func AppendUvarint(buf []byte, x uint64) []byte { + for x >= 0x80 { + buf = append(buf, byte(x)|0x80) + x >>= 7 + } + return append(buf, byte(x)) +} + // PutUvarint encodes a uint64 into buf and returns the number of bytes written. // If the buffer is too small, PutUvarint will panic. func PutUvarint(buf []byte, x uint64) int { @@ -77,6 +87,16 @@ func Uvarint(buf []byte) (uint64, int) { return 0, 0 } +// AppendVarint appends the varint-encoded form of x, +// as generated by PutVarint, to buf and returns the extended buffer. +func AppendVarint(buf []byte, x int64) []byte { + ux := uint64(x) << 1 + if x < 0 { + ux = ^ux + } + return AppendUvarint(buf, ux) +} + // PutVarint encodes an int64 into buf and returns the number of bytes written. // If the buffer is too small, PutVarint will panic. func PutVarint(buf []byte, x int64) int { |
