Slice

Trait Slice 

Source
pub unsafe trait Slice:
    Send
    + Sync
    + 'static {
    type Item: Send + Sync + 'static;
    type Vec: BufferMut<Self>;
    type TryFromSliceError;

    // Required methods
    fn to_slice(&self) -> &[Self::Item];
    unsafe fn to_slice_mut(&mut self) -> &mut [Self::Item];
    fn into_boxed_slice(self: Box<Self>) -> Box<[Self::Item]>;
    fn into_vec(vec: Self::Vec) -> Vec<Self::Item>;
    unsafe fn from_slice_unchecked(slice: &[Self::Item]) -> &Self;
    unsafe fn from_slice_mut_unchecked(slice: &mut [Self::Item]) -> &mut Self;
    unsafe fn from_boxed_slice_unchecked(boxed: Box<[Self::Item]>) -> Box<Self>;
    unsafe fn from_vec_unchecked(vec: Vec<Self::Item>) -> Self::Vec;
    fn try_from_slice(
        slice: &[Self::Item],
    ) -> Result<&Self, Self::TryFromSliceError>;
    fn try_from_slice_mut(
        slice: &mut [Self::Item],
    ) -> Result<&mut Self, Self::TryFromSliceError>;
}
Expand description

A slice, e.g. [T] or str.

§Safety

  • into_vec must be pure, i.e. mem::forget(S::into_vec(ptr::read(vec_ptr))) should not invalidate memory behind vec_ptr.
  • If try_from_slice_mut returns Ok for a slice, then try_from_slice must also return Ok for that slice.

Required Associated Types§

Source

type Item: Send + Sync + 'static

The slice item, e.g. T for [T] or u8 for str.

Source

type Vec: BufferMut<Self>

The associated vector to the slice type, e.g. Vec<T> for [T] or String for str.

Source

type TryFromSliceError

Error which can occur when attempting to convert an item slice to the given slice type.

Required Methods§

Source

fn to_slice(&self) -> &[Self::Item]

Converts a slice to its underlying item slice.

Source

unsafe fn to_slice_mut(&mut self) -> &mut [Self::Item]

Converts a mutable slice to its underlying item slice.

§Safety

The item slice is never mutated, as it is only used for storage.

Source

fn into_boxed_slice(self: Box<Self>) -> Box<[Self::Item]>

Converts a boxed slice to its underlying boxed item slice.

Source

fn into_vec(vec: Self::Vec) -> Vec<Self::Item>

Converts a vector to its underlying item vector.

Source

unsafe fn from_slice_unchecked(slice: &[Self::Item]) -> &Self

Converts back a slice from its underlying item slice.

§Safety

The item slice must be valid as if it has been obtained from Self::to_slice.

Source

unsafe fn from_slice_mut_unchecked(slice: &mut [Self::Item]) -> &mut Self

Converts back a mutable slice from its underlying item slice.

§Safety

The item slice must be valid as if it has been obtained from Self::to_slice_mut.

Source

unsafe fn from_boxed_slice_unchecked(boxed: Box<[Self::Item]>) -> Box<Self>

Converts back a boxed slice from its underlying boxed item slice.

§Safety

The boxed item slice must be valid as if it has been obtained from Self::into_boxed_slice.

Source

unsafe fn from_vec_unchecked(vec: Vec<Self::Item>) -> Self::Vec

Converts back a vector from its underlying item vector.

§Safety

The vector must be valid as if it has been obtained from Self::into_vec.

Source

fn try_from_slice( slice: &[Self::Item], ) -> Result<&Self, Self::TryFromSliceError>

Try converting an item slice to the given slice type.

Source

fn try_from_slice_mut( slice: &mut [Self::Item], ) -> Result<&mut Self, Self::TryFromSliceError>

Tries converting a mutable item slice to the given slice type.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Slice for str

Source§

type Item = u8

Source§

type Vec = String

Source§

type TryFromSliceError = Utf8Error

Source§

fn to_slice(&self) -> &[Self::Item]

Source§

unsafe fn to_slice_mut(&mut self) -> &mut [Self::Item]

Source§

fn into_boxed_slice(self: Box<Self>) -> Box<[Self::Item]>

Source§

fn into_vec(vec: Self::Vec) -> Vec<Self::Item>

Source§

unsafe fn from_slice_unchecked(slice: &[Self::Item]) -> &Self

Source§

unsafe fn from_slice_mut_unchecked(slice: &mut [Self::Item]) -> &mut Self

Source§

unsafe fn from_boxed_slice_unchecked(boxed: Box<[Self::Item]>) -> Box<Self>

Source§

unsafe fn from_vec_unchecked(vec: Vec<Self::Item>) -> Self::Vec

Source§

fn try_from_slice( slice: &[Self::Item], ) -> Result<&Self, Self::TryFromSliceError>

Source§

fn try_from_slice_mut( slice: &mut [Self::Item], ) -> Result<&mut Self, Self::TryFromSliceError>

Source§

impl Slice for BStr

Available on crate feature bstr only.
Source§

type Item = u8

Source§

type Vec = BString

Source§

type TryFromSliceError = Infallible

Source§

fn to_slice(&self) -> &[Self::Item]

Source§

unsafe fn to_slice_mut(&mut self) -> &mut [Self::Item]

Source§

fn into_boxed_slice(self: Box<Self>) -> Box<[Self::Item]>

Source§

fn into_vec(vec: Self::Vec) -> Vec<Self::Item>

Source§

unsafe fn from_slice_unchecked(slice: &[Self::Item]) -> &Self

Source§

unsafe fn from_slice_mut_unchecked(slice: &mut [Self::Item]) -> &mut Self

Source§

unsafe fn from_boxed_slice_unchecked(boxed: Box<[Self::Item]>) -> Box<Self>

Source§

unsafe fn from_vec_unchecked(vec: Vec<Self::Item>) -> Self::Vec

Source§

fn try_from_slice( slice: &[Self::Item], ) -> Result<&Self, Self::TryFromSliceError>

Source§

fn try_from_slice_mut( slice: &mut [Self::Item], ) -> Result<&mut Self, Self::TryFromSliceError>

Source§

impl<T: Send + Sync + 'static> Slice for [T]

Source§

type Item = T

Source§

type Vec = Vec<T>

Source§

type TryFromSliceError = Infallible

Source§

fn to_slice(&self) -> &[Self::Item]

Source§

unsafe fn to_slice_mut(&mut self) -> &mut [Self::Item]

Source§

fn into_boxed_slice(self: Box<Self>) -> Box<[Self::Item]>

Source§

fn into_vec(vec: Self::Vec) -> Vec<Self::Item>

Source§

unsafe fn from_slice_unchecked(slice: &[Self::Item]) -> &Self

Source§

unsafe fn from_slice_mut_unchecked(slice: &mut [Self::Item]) -> &mut Self

Source§

unsafe fn from_boxed_slice_unchecked(boxed: Box<[Self::Item]>) -> Box<Self>

Source§

unsafe fn from_vec_unchecked(vec: Vec<Self::Item>) -> Self::Vec

Source§

fn try_from_slice( slice: &[Self::Item], ) -> Result<&Self, Self::TryFromSliceError>

Source§

fn try_from_slice_mut( slice: &mut [Self::Item], ) -> Result<&mut Self, Self::TryFromSliceError>

Implementors§