diff options
Diffstat (limited to 'src/varint.rs')
-rw-r--r-- | src/varint.rs | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/varint.rs b/src/varint.rs index 1f1cb1c..8e542bc 100644 --- a/src/varint.rs +++ b/src/varint.rs @@ -1,17 +1,21 @@ +use std::mem::MaybeUninit; + +use crate::misc::maybe_uninit_write; + /// Encode u64 as varint. /// Panics if buffer length is less than 10. #[inline] -pub fn encode_varint64(mut value: u64, buf: &mut [u8]) -> usize { +pub fn encode_varint64(mut value: u64, buf: &mut [MaybeUninit<u8>]) -> usize { assert!(buf.len() >= 10); unsafe { let mut i = 0; while (value & !0x7F) > 0 { - *buf.get_unchecked_mut(i) = ((value & 0x7F) | 0x80) as u8; + maybe_uninit_write(buf.get_unchecked_mut(i), ((value & 0x7F) | 0x80) as u8); value >>= 7; i += 1; } - *buf.get_unchecked_mut(i) = value as u8; + maybe_uninit_write(buf.get_unchecked_mut(i), value as u8); i + 1 } } @@ -19,17 +23,17 @@ pub fn encode_varint64(mut value: u64, buf: &mut [u8]) -> usize { /// Encode u32 value as varint. /// Panics if buffer length is less than 5. #[inline] -pub fn encode_varint32(mut value: u32, buf: &mut [u8]) -> usize { +pub fn encode_varint32(mut value: u32, buf: &mut [MaybeUninit<u8>]) -> usize { assert!(buf.len() >= 5); unsafe { let mut i = 0; while (value & !0x7F) > 0 { - *buf.get_unchecked_mut(i) = ((value & 0x7F) | 0x80) as u8; + maybe_uninit_write(buf.get_unchecked_mut(i), ((value & 0x7F) | 0x80) as u8); value >>= 7; i += 1; } - *buf.get_unchecked_mut(i) = value as u8; + maybe_uninit_write(buf.get_unchecked_mut(i), value as u8); i + 1 } } |