| 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; |