summaryrefslogtreecommitdiffstats
path: root/vendor/zerovec/src/varzerovec
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/zerovec/src/varzerovec')
-rw-r--r--vendor/zerovec/src/varzerovec/components.rs7
-rw-r--r--vendor/zerovec/src/varzerovec/databake.rs42
-rw-r--r--vendor/zerovec/src/varzerovec/owned.rs21
-rw-r--r--vendor/zerovec/src/varzerovec/vec.rs10
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())
}
}