usecrate::follow::Follow; usecrate::vector::VectorIter; usecrate::EndianScalar; use core::fmt::{Debug, Formatter, Result}; use core::marker::PhantomData; use core::mem::size_of;
impl<'a, T: 'a, const N: usize> Debug for Array<'a, T, N> where
T: 'a + Follow<'a>,
<T as Follow<'a>>::Inner: Debug,
{ fn fmt(&self, f: &mut Formatter) -> Result {
f.debug_list().entries(self.iter()).finish()
}
}
#[allow(clippy::len_without_is_empty)] #[allow(clippy::from_over_into)] // TODO(caspern): Go from From to Into. impl<'a, T: 'a, const N: usize> Array<'a, T, N> { /// # Safety /// /// buf must be a contiguous array of `T` /// /// # Panics /// /// Panics if `buf.len()` is not `size_of::<T>() * N` #[inline(always)] pubunsafefn new(buf: &'a [u8]) -> Self {
assert_eq!(size_of::<T>() * N, buf.len());
impl<'a, T: Follow<'a> + 'a, const N: usize> Array<'a, T, N> { #[inline(always)] pubfn get(&self, idx: usize) -> T::Inner {
assert!(idx < N); let sz = size_of::<T>(); // Safety: // self.0 was valid for length `N` on construction and have verified `idx < N` unsafe { T::follow(self.0, sz * idx) }
}
#[inline(always)] pubfn iter(&self) -> VectorIter<'a, T> { // Safety: // self.0 was valid for length N on construction unsafe { VectorIter::from_slice(self.0, self.len()) }
}
}
// Safety: // array is aligned by T, and has length N unsafe { for i in0..N { let value_i = initializer(i);
ptr_i.write(value_i);
ptr_i = ptr_i.add(1);
}
array.assume_init()
}
}
#[cfg(feature = "serialize")] impl<'a, T: 'a, const N: usize> serde::ser::Serialize for Array<'a, T, N> where
T: 'a + Follow<'a>,
<T as Follow<'a>>::Inner: serde::ser::Serialize,
{ fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error> where
S: serde::ser::Serializer,
{ use serde::ser::SerializeSeq; letmut seq = serializer.serialize_seq(Some(self.len()))?; for element inself.iter() {
seq.serialize_element(&element)?;
}
seq.end()
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.