MCPcopy Create free account
hub / github.com/cosdata/cosdata / write_len

Function write_len

src/models/serializer/mod.rs:26–40  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

24/// - 2 bytes if < 2¹⁴
25/// - 3 bytes otherwise (uses all 8 bits of the final byte, giving 22 bits total)
26pub 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.
43pub fn read_len(bufman: &BufferManager, cursor: u64) -> Result<u32, BufIoError> {

Callers 2

serializeMethod · 0.70
serializeMethod · 0.70

Calls 1

pushMethod · 0.45

Tested by

no test coverage detected