byteio - littleendianreader_varint.go
1 package byteio
2
3 // ReadUintX reads an unsinged integer that was encoded using a variable number
4 // of bytes
5 func (e *LittleEndianReader) ReadUintX() (uint64, int, error) {
6 var (
7 n int
8 val uint64
9 )
10 for n < 9 {
11 c, err := e.ReadByte()
12 if err != nil {
13 return 0, n, err
14 }
15 val += uint64(c) << uint(n*7)
16 n++
17 if c&0x80 == 0 {
18 break
19 }
20 }
21 return val, n, nil
22 }
23
24 // ReadIntX reads an integer that was encoded using a variable number of bytes
25 func (e *LittleEndianReader) ReadIntX() (int64, int, error) {
26 i, n, err := e.ReadUintX()
27 return unzigzag(i), n, err
28 }
29