MCPcopy Create free account
hub / github.com/apache/fory / read_var_u64

Method read_var_u64

rust/fory-core/src/buffer.rs:790–850  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

788
789 #[inline(always)]
790 pub fn read_var_u64(&mut self) -> Result<u64, Error> {
791 let b0 = self.value_at(self.cursor)? as u64;
792 if b0 < 0x80 {
793 self.move_next(1);
794 return Ok(b0);
795 }
796
797 let b1 = self.value_at(self.cursor + 1)? as u64;
798 let mut result = (b0 & 0x7F) | ((b1 & 0x7F) << 7);
799 if b1 < 0x80 {
800 self.move_next(2);
801 return Ok(result);
802 }
803
804 let b2 = self.value_at(self.cursor + 2)? as u64;
805 result |= (b2 & 0x7F) << 14;
806 if b2 < 0x80 {
807 self.move_next(3);
808 return Ok(result);
809 }
810
811 let b3 = self.value_at(self.cursor + 3)? as u64;
812 result |= (b3 & 0x7F) << 21;
813 if b3 < 0x80 {
814 self.move_next(4);
815 return Ok(result);
816 }
817
818 let b4 = self.value_at(self.cursor + 4)? as u64;
819 result |= (b4 & 0x7F) << 28;
820 if b4 < 0x80 {
821 self.move_next(5);
822 return Ok(result);
823 }
824
825 let b5 = self.value_at(self.cursor + 5)? as u64;
826 result |= (b5 & 0x7F) << 35;
827 if b5 < 0x80 {
828 self.move_next(6);
829 return Ok(result);
830 }
831
832 let b6 = self.value_at(self.cursor + 6)? as u64;
833 result |= (b6 & 0x7F) << 42;
834 if b6 < 0x80 {
835 self.move_next(7);
836 return Ok(result);
837 }
838
839 let b7 = self.value_at(self.cursor + 7)? as u64;
840 result |= (b7 & 0x7F) << 49;
841 if b7 < 0x80 {
842 self.move_next(8);
843 return Ok(result);
844 }
845
846 let b8 = self.value_at(self.cursor + 8)? as u64;
847 result |= (b8 & 0xFF) << 56;

Callers 9

read_var_i64Method · 0.80
read_usizeMethod · 0.80
read_decimal_unscaledFunction · 0.80
read_i64_payloadFunction · 0.80
read_u64_payloadFunction · 0.80
read_scalar_valueFunction · 0.80
skip_decimalFunction · 0.80
skip_valueFunction · 0.80
test_buffer_varFunction · 0.80

Calls 2

move_nextMethod · 0.80
value_atMethod · 0.45

Tested by 1

test_buffer_varFunction · 0.64