diff options
Diffstat (limited to 'vendor/zerovec/src/varzerovec')
-rw-r--r-- | vendor/zerovec/src/varzerovec/components.rs | 7 | ||||
-rw-r--r-- | vendor/zerovec/src/varzerovec/databake.rs | 42 | ||||
-rw-r--r-- | vendor/zerovec/src/varzerovec/owned.rs | 21 | ||||
-rw-r--r-- | vendor/zerovec/src/varzerovec/vec.rs | 10 |
4 files changed, 44 insertions, 36 deletions
diff --git a/vendor/zerovec/src/varzerovec/components.rs b/vendor/zerovec/src/varzerovec/components.rs index bf70c83c5..ff26d9029 100644 --- a/vendor/zerovec/src/varzerovec/components.rs +++ b/vendor/zerovec/src/varzerovec/components.rs @@ -85,7 +85,7 @@ unsafe impl VarZeroVecFormat for Index16 { unsafe impl VarZeroVecFormat for Index32 { const INDEX_WIDTH: usize = 4; - const MAX_VALUE: u32 = u32::MAX as u32; + const MAX_VALUE: u32 = u32::MAX; type RawBytes = RawBytesULE<4>; #[inline] fn rawbytes_to_usize(raw: Self::RawBytes) -> usize { @@ -110,6 +110,7 @@ unsafe impl VarZeroVecFormat for Index32 { /// exist. /// /// See [`VarZeroVecComponents::parse_byte_slice()`] for information on the internal invariants involved +#[derive(Debug)] pub struct VarZeroVecComponents<'a, T: ?Sized, F> { /// The number of elements len: u32, @@ -197,7 +198,7 @@ impl<'a, T: VarULE + ?Sized, F: VarZeroVecFormat> VarZeroVecComponents<'a, T, F> .ok_or(ZeroVecError::VarZeroVecFormatError)?; let borrowed = VarZeroVecComponents { - len: len as u32, + len, indices: indices_bytes, things, entire_slice: slice, @@ -392,7 +393,7 @@ impl<'a, T: VarULE + ?Sized, F: VarZeroVecFormat> VarZeroVecComponents<'a, T, F> .copied() .map(F::rawbytes_to_usize) .collect::<Vec<_>>(); - format!("VarZeroVecComponents {{ indices: {:?} }}", indices) + format!("VarZeroVecComponents {{ indices: {indices:?} }}") } } diff --git a/vendor/zerovec/src/varzerovec/databake.rs b/vendor/zerovec/src/varzerovec/databake.rs index 2c3d506b3..8d9fc0bfc 100644 --- a/vendor/zerovec/src/varzerovec/databake.rs +++ b/vendor/zerovec/src/varzerovec/databake.rs @@ -8,18 +8,26 @@ use databake::*; impl<T: VarULE + ?Sized> Bake for VarZeroVec<'_, T> { fn bake(&self, env: &CrateEnv) -> TokenStream { env.insert("zerovec"); - let bytes = self.as_bytes(); - // Safe because self.as_bytes is a safe input - quote! { unsafe { ::zerovec::VarZeroVec::from_bytes_unchecked(&[#(#bytes),*]) } } + if self.is_empty() { + quote! { ::zerovec::VarZeroVec::new() } + } else { + let bytes = databake::Bake::bake(&self.as_bytes(), env); + // Safe because self.as_bytes is a safe input + quote! { unsafe { ::zerovec::VarZeroVec::from_bytes_unchecked(#bytes) } } + } } } impl<T: VarULE + ?Sized> Bake for &VarZeroSlice<T> { fn bake(&self, env: &CrateEnv) -> TokenStream { env.insert("zerovec"); - let bytes = self.as_bytes(); - // Safe because self.as_bytes is a safe input - quote! { unsafe { ::zerovec::VarZeroSlice::from_bytes_unchecked(&[#(#bytes),*]) } } + if self.is_empty() { + quote! { ::zerovec::VarZeroSlice::new_empty() } + } else { + let bytes = databake::Bake::bake(&self.as_bytes(), env); + // Safe because self.as_bytes is a safe input + quote! { unsafe { ::zerovec::VarZeroSlice::from_bytes_unchecked(#bytes) } } + } } } @@ -27,10 +35,15 @@ impl<T: VarULE + ?Sized> Bake for &VarZeroSlice<T> { fn test_baked_vec() { test_bake!( VarZeroVec<str>, + const: crate::VarZeroVec::new(), + zerovec + ); + test_bake!( + VarZeroVec<str>, const: unsafe { - crate::VarZeroVec::from_bytes_unchecked(&[ - 2u8, 1u8, 0u8, 22u8, 0u8, 77u8, 1u8, 92u8, 17u8, - ]) + crate::VarZeroVec::from_bytes_unchecked( + b"\x02\x01\0\x16\0M\x01\\\x11" + ) }, zerovec ); @@ -40,10 +53,15 @@ fn test_baked_vec() { fn test_baked_slice() { test_bake!( &VarZeroSlice<str>, + const: crate::VarZeroSlice::new_empty(), + zerovec + ); + test_bake!( + &VarZeroSlice<str>, const: unsafe { - crate::VarZeroSlice::from_bytes_unchecked(&[ - 2u8, 1u8, 0u8, 22u8, 0u8, 77u8, 1u8, 92u8, 17u8, - ]) + crate::VarZeroSlice::from_bytes_unchecked( + b"\x02\x01\0\x16\0M\x01\\\x11" + ) }, zerovec ); diff --git a/vendor/zerovec/src/varzerovec/owned.rs b/vendor/zerovec/src/varzerovec/owned.rs index af4692d48..76de48760 100644 --- a/vendor/zerovec/src/varzerovec/owned.rs +++ b/vendor/zerovec/src/varzerovec/owned.rs @@ -96,7 +96,7 @@ impl<T: VarULE + ?Sized, F: VarZeroVecFormat> VarZeroVecOwned<T, F> { /// Obtain this `VarZeroVec` as a [`VarZeroSlice`] pub fn as_slice(&self) -> &VarZeroSlice<T, F> { - let slice: &[u8] = &*self.entire_slice; + let slice: &[u8] = &self.entire_slice; unsafe { // safety: the slice is known to come from a valid parsed VZV VarZeroSlice::from_byte_slice_unchecked(slice) @@ -146,7 +146,7 @@ impl<T: VarULE + ?Sized, F: VarZeroVecFormat> VarZeroVecOwned<T, F> { unsafe fn element_range_unchecked(&self, idx: usize) -> core::ops::Range<usize> { let start = self.element_position_unchecked(idx); let end = self.element_position_unchecked(idx + 1); - debug_assert!(start <= end, "{} > {}", start, end); + debug_assert!(start <= end, "{start} > {end}"); start..end } @@ -353,7 +353,7 @@ impl<T: VarULE + ?Sized, F: VarZeroVecFormat> VarZeroVecOwned<T, F> { + METADATA_WIDTH + self.len() * F::INDEX_WIDTH + self.element_position_unchecked(index); - &mut self.entire_slice[element_pos..element_pos + new_size as usize] + &mut self.entire_slice[element_pos..element_pos + new_size] } /// Checks the internal invariants of the vec to ensure safe code will not cause UB. @@ -423,10 +423,7 @@ impl<T: VarULE + ?Sized, F: VarZeroVecFormat> VarZeroVecOwned<T, F> { pub fn insert<A: EncodeAsVarULE<T> + ?Sized>(&mut self, index: usize, element: &A) { let len = self.len(); if index > len { - panic!( - "Called out-of-bounds insert() on VarZeroVec, index {} len {}", - index, len - ); + panic!("Called out-of-bounds insert() on VarZeroVec, index {index} len {len}"); } let value_len = element.encode_var_ule_len(); @@ -451,10 +448,7 @@ impl<T: VarULE + ?Sized, F: VarZeroVecFormat> VarZeroVecOwned<T, F> { pub fn remove(&mut self, index: usize) { let len = self.len(); if index >= len { - panic!( - "Called out-of-bounds remove() on VarZeroVec, index {} len {}", - index, len - ); + panic!("Called out-of-bounds remove() on VarZeroVec, index {index} len {len}"); } if len == 1 { // This is removing the last element. Set the slice to empty to ensure all empty vecs have empty data slices. @@ -470,10 +464,7 @@ impl<T: VarULE + ?Sized, F: VarZeroVecFormat> VarZeroVecOwned<T, F> { pub fn replace<A: EncodeAsVarULE<T> + ?Sized>(&mut self, index: usize, element: &A) { let len = self.len(); if index >= len { - panic!( - "Called out-of-bounds replace() on VarZeroVec, index {} len {}", - index, len - ); + panic!("Called out-of-bounds replace() on VarZeroVec, index {index} len {len}"); } let value_len = element.encode_var_ule_len(); diff --git a/vendor/zerovec/src/varzerovec/vec.rs b/vendor/zerovec/src/varzerovec/vec.rs index 7edb48a96..1401a180a 100644 --- a/vendor/zerovec/src/varzerovec/vec.rs +++ b/vendor/zerovec/src/varzerovec/vec.rs @@ -248,7 +248,7 @@ impl<'a, T: VarULE + ?Sized, F: VarZeroVecFormat> VarZeroVec<'a, T, F> { /// assert!(vzv.is_empty()); /// ``` #[inline] - pub fn new() -> Self { + pub const fn new() -> Self { Self::Borrowed(VarZeroSlice::new_empty()) } @@ -354,7 +354,7 @@ impl<'a, T: VarULE + ?Sized, F: VarZeroVecFormat> VarZeroVec<'a, T, F> { /// Obtain this `VarZeroVec` as a [`VarZeroSlice`] pub fn as_slice(&self) -> &VarZeroSlice<T, F> { match *self { - VarZeroVec::Owned(ref owned) => &**owned, + VarZeroVec::Owned(ref owned) => owned, VarZeroVec::Borrowed(b) => b, } } @@ -413,8 +413,7 @@ where { #[inline] fn from(elements: &Vec<A>) -> Self { - #[allow(clippy::unwrap_used)] // TODO(#1410) Better story for fallibility - VarZeroVecOwned::try_from_elements(elements).unwrap().into() + Self::from(elements.as_slice()) } } @@ -439,8 +438,7 @@ where { #[inline] fn from(elements: &[A; N]) -> Self { - #[allow(clippy::unwrap_used)] // TODO(#1410) Better story for fallibility - VarZeroVecOwned::try_from_elements(elements).unwrap().into() + Self::from(elements.as_slice()) } } |