pub struct UnalignedSlice<'a, T> { /* private fields */ }Expand description
A minimally functional span over a potentially unaligned slice of elements of type T.
Like &[T], this type guarantees that the memory
[self.as_ptr(), self.as_ptr().add(self.len())) is valid for reads.
However, unlike &[T], the pointer Self::as_ptr is not guaranteed to be aligned
to std::mem::align_of::<T>().
If the type T is Copy, then std::ptr::read_unaligned can be used on the valid
memory region for this slice to access values of type T.
Implementations§
Source§impl<'a, T> UnalignedSlice<'a, T>
impl<'a, T> UnalignedSlice<'a, T>
Sourcepub const unsafe fn new(ptr: *const T, len: usize) -> Self
pub const unsafe fn new(ptr: *const T, len: usize) -> Self
Construct a new UnalignedSlice over the region [ptr, ptr.add(len)).
§Safety
The provided memory region must be valid for reading via std::ptr::read_unaligned
for the duration of the associated lifetime.
Note that ptr need not be aligned to std::mem::align_of::<T>().
Argument ptr may be null if len == 0.
Sourcepub const fn len(&self) -> usize
pub const fn len(&self) -> usize
Return the number of elements of type T available for reading from Self::as_ptr.
Trait Implementations§
Source§impl<T> AsUnaligned for UnalignedSlice<'_, T>
impl<T> AsUnaligned for UnalignedSlice<'_, T>
Source§fn as_unaligned(&self) -> UnalignedSlice<'_, T>
fn as_unaligned(&self) -> UnalignedSlice<'_, T>
UnalignedSlice view of self.Source§impl<T> Clone for UnalignedSlice<'_, T>
impl<T> Clone for UnalignedSlice<'_, T>
impl<T> Copy for UnalignedSlice<'_, T>
Source§impl<'a, T: Debug> Debug for UnalignedSlice<'a, T>
impl<'a, T: Debug> Debug for UnalignedSlice<'a, T>
Source§impl<T, U> DistanceFunction<UnalignedSlice<'_, T>, UnalignedSlice<'_, U>> for Distance<T, U>where
T: 'static,
U: 'static,
impl<T, U> DistanceFunction<UnalignedSlice<'_, T>, UnalignedSlice<'_, U>> for Distance<T, U>where
T: 'static,
U: 'static,
Source§fn evaluate_similarity(
&self,
x: UnalignedSlice<'_, T>,
y: UnalignedSlice<'_, U>,
) -> f32
fn evaluate_similarity( &self, x: UnalignedSlice<'_, T>, y: UnalignedSlice<'_, U>, ) -> f32
Source§impl<A, T, L, R, const N: usize, F> FTarget2<A, T, UnalignedSlice<'_, L>, UnalignedSlice<'_, R>> for Specialize<N, F>where
A: Architecture,
F: for<'a, 'b> Target2<A, T, UnalignedSlice<'a, L>, UnalignedSlice<'b, R>> + Default,
impl<A, T, L, R, const N: usize, F> FTarget2<A, T, UnalignedSlice<'_, L>, UnalignedSlice<'_, R>> for Specialize<N, F>where
A: Architecture,
F: for<'a, 'b> Target2<A, T, UnalignedSlice<'a, L>, UnalignedSlice<'b, R>> + Default,
fn run(arch: A, x: UnalignedSlice<'_, L>, y: UnalignedSlice<'_, R>) -> T
Source§impl<'a, T> From<&'a [T]> for UnalignedSlice<'a, T>
impl<'a, T> From<&'a [T]> for UnalignedSlice<'a, T>
impl<T> Send for UnalignedSlice<'_, T>where
T: Sync,
SAFETY: UnalignedSlice is like a &[T]: it can be sent to other threads when &T: Send,
which holds iff T: Sync.
impl<T> Sync for UnalignedSlice<'_, T>where
T: Sync,
SAFETY: UnalignedSlice is like a &[T]: it can be shared with other threads when &T
is send, implying the bound T: Sync.