WriteVaruint36Small writes a varint optimized for small values (up to 36 bits) Used for string headers: (length << 2) | encoding
(value uint64)
| 950 | // WriteVaruint36Small writes a varint optimized for small values (up to 36 bits) |
| 951 | // Used for string headers: (length << 2) | encoding |
| 952 | func (b *ByteBuffer) WriteVaruint36Small(value uint64) { |
| 953 | b.grow(5) |
| 954 | offset := b.writerIndex |
| 955 | data := b.data[offset:] |
| 956 | |
| 957 | if value < 0x80 { |
| 958 | data[0] = byte(value) |
| 959 | b.writerIndex += 1 |
| 960 | } else if value < 0x4000 { |
| 961 | data[0] = byte(value&0x7F) | 0x80 |
| 962 | data[1] = byte(value >> 7) |
| 963 | b.writerIndex += 2 |
| 964 | } else if value < 0x200000 { |
| 965 | data[0] = byte(value&0x7F) | 0x80 |
| 966 | data[1] = byte((value>>7)&0x7F) | 0x80 |
| 967 | data[2] = byte(value >> 14) |
| 968 | b.writerIndex += 3 |
| 969 | } else if value < 0x10000000 { |
| 970 | data[0] = byte(value&0x7F) | 0x80 |
| 971 | data[1] = byte((value>>7)&0x7F) | 0x80 |
| 972 | data[2] = byte((value>>14)&0x7F) | 0x80 |
| 973 | data[3] = byte(value >> 21) |
| 974 | b.writerIndex += 4 |
| 975 | } else { |
| 976 | data[0] = byte(value&0x7F) | 0x80 |
| 977 | data[1] = byte((value>>7)&0x7F) | 0x80 |
| 978 | data[2] = byte((value>>14)&0x7F) | 0x80 |
| 979 | data[3] = byte((value>>21)&0x7F) | 0x80 |
| 980 | data[4] = byte(value >> 28) |
| 981 | b.writerIndex += 5 |
| 982 | } |
| 983 | } |
| 984 | |
| 985 | // ReadVaruint36Small reads a varint optimized for small values (up to 36 bits) |
| 986 | // Used for string headers: (length << 2) | encoding |