diff --git a/src/encoding/binary/varint.go b/src/encoding/binary/varint.go index bcb8ac9a459c5c..75a24fbb03fafa 100644 --- a/src/encoding/binary/varint.go +++ b/src/encoding/binary/varint.go @@ -131,3 +131,24 @@ func ReadVarint(r io.ByteReader) (int64, error) { } return x, err } + +// WriteUvarint encodes a uint64 onto w +func WriteUvarint(w io.ByteWriter, x uint64) error { + for x >= 0x80 { + err := w.WriteByte(byte(x) | 0x80) + if err != nil { + return err + } + x >>= 7 + } + return w.WriteByte(byte(x)) +} + +// WriteVarint encodes an int64 onto w +func WriteVarint(w io.ByteWriter, x int64) error { + ux := uint64(x) << 1 + if x < 0 { + ux = ^ux + } + return WriteUvarint(w, ux) +}