(b []byte)
| 30 | var errVarintOverflow = errors.New("varint overflowed 64 bits integer") |
| 31 | |
| 32 | func decodeVarint(b []byte) (uint64, int, error) { |
| 33 | if len(b) != 0 && b[0] < 0x80 { |
| 34 | // Fast-path for decoding the common case of varints that fit on a |
| 35 | // single byte. |
| 36 | // |
| 37 | // This path is ~60% faster than calling binary.Uvarint. |
| 38 | return uint64(b[0]), 1, nil |
| 39 | } |
| 40 | |
| 41 | var x uint64 |
| 42 | var s uint |
| 43 | |
| 44 | for i, c := range b { |
| 45 | if c < 0x80 { |
| 46 | if i > 9 || i == 9 && c > 1 { |
| 47 | return 0, i, errVarintOverflow |
| 48 | } |
| 49 | return x | uint64(c)<<s, i + 1, nil |
| 50 | } |
| 51 | x |= uint64(c&0x7f) << s |
| 52 | s += 7 |
| 53 | } |
| 54 | |
| 55 | return x, len(b), io.ErrUnexpectedEOF |
| 56 | } |
| 57 | |
| 58 | func decodeVarintZigZag(b []byte) (int64, int, error) { |
| 59 | v, n, err := decodeVarint(b) |
no outgoing calls
searching dependent graphs…