Encode `len` into 1–3 bytes: - 1 byte if < 2⁷ - 2 bytes if < 2¹⁴ - 3 bytes otherwise (uses all 8 bits of the final byte, giving 22 bits total)
(buf: &mut Vec<u8>, len: u32)
| 24 | /// - 2 bytes if < 2¹⁴ |
| 25 | /// - 3 bytes otherwise (uses all 8 bits of the final byte, giving 22 bits total) |
| 26 | pub fn write_len(buf: &mut Vec<u8>, len: u32) { |
| 27 | if len < (1 << 7) { |
| 28 | // [0vvvvvvv] |
| 29 | buf.push(len as u8); |
| 30 | } else if len < (1 << 14) { |
| 31 | // [1vvvvvvv] [0vvvvvvv] |
| 32 | buf.push(((len) as u8 & 0x7F) | 0x80); |
| 33 | buf.push((len >> 7) as u8); |
| 34 | } else { |
| 35 | // [1vvvvvvv] [1vvvvvvv] [vvvvvvvv] |
| 36 | buf.push(((len) as u8 & 0x7F) | 0x80); |
| 37 | buf.push(((len >> 7) as u8 & 0x7F) | 0x80); |
| 38 | buf.push((len >> 14) as u8); |
| 39 | } |
| 40 | } |
| 41 | |
| 42 | /// Decode a 1–3 byte varint back to `u32`. Any bits beyond 22 are ignored. |
| 43 | pub fn read_len(bufman: &BufferManager, cursor: u64) -> Result<u32, BufIoError> { |