MCPcopy Create free account
hub / github.com/apache/paimon-rust / decode_delta_varints

Function decode_delta_varints

crates/paimon/src/arrow/format/blob.rs:538–564  ·  view source on GitHub ↗
(bytes: &[u8])

Source from the content-addressed store, hash-verified

536}
537
538fn decode_delta_varints(bytes: &[u8]) -> crate::Result<Vec<i64>> {
539 let mut values = Vec::new();
540 let mut cursor = 0usize;
541 let mut previous = 0_i64;
542
543 while cursor < bytes.len() {
544 let (delta, consumed) = decode_varint(&bytes[cursor..])?;
545 cursor += consumed;
546
547 let value = if values.is_empty() {
548 delta
549 } else {
550 previous
551 .checked_add(delta)
552 .ok_or_else(|| Error::DataInvalid {
553 message: format!(
554 "Blob delta-varint index overflow after previous value {previous}"
555 ),
556 source: None,
557 })?
558 };
559 values.push(value);
560 previous = value;
561 }
562
563 Ok(values)
564}
565
566fn decode_varint(bytes: &[u8]) -> crate::Result<(i64, usize)> {
567 let mut value = 0_u64;

Calls 3

decode_varintFunction · 0.85
lenMethod · 0.45
is_emptyMethod · 0.45