pub struct BoxedDst<T: ?Sized> { /* private fields */ }
Expand description

A helper type to create boxed DST, i.e., tags with a dynamic size for the builder. This is tricky in Rust. This type behaves similar to the regular Box type except that it ensure the same layout is used for the (explicit) allocation and the (implicit) deallocation of memory. Otherwise, I didn’t found any way to figure out the right layout for a DST. Miri always reported issues that the deallocation used a wrong layout.

Technically, I’m certain this code is memory safe. But with this type, I also can convince miri that it is.

Trait Implementations§

source§

impl<T: Debug + ?Sized> Debug for BoxedDst<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: ?Sized> Deref for BoxedDst<T>

§

type Target = T

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl<T: ?Sized> Drop for BoxedDst<T>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<T: ?Sized + PartialEq> PartialEq for BoxedDst<T>

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<T: Eq + ?Sized> Eq for BoxedDst<T>

source§

impl<T: ?Sized> StructuralEq for BoxedDst<T>

Auto Trait Implementations§

§

impl<T: ?Sized> RefUnwindSafe for BoxedDst<T>
where T: RefUnwindSafe,

§

impl<T> !Send for BoxedDst<T>

§

impl<T> !Sync for BoxedDst<T>

§

impl<T: ?Sized> Unpin for BoxedDst<T>
where T: Unpin,

§

impl<T: ?Sized> UnwindSafe for BoxedDst<T>
where T: UnwindSafe + RefUnwindSafe,

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

source§

impl<T> Pointee for T

§

type Metadata = ()

The type for metadata in pointers and references to Self.
source§

impl<T> TagTrait for T
where T: Pointee<Metadata = ()>,

source§

fn dst_size(_: &Tag) -> <T as Pointee>::Metadata

Returns the amount of items in the dynamically sized portion of the DST. Note that this is not the amount of bytes. So if the dynamically sized portion is 16 bytes in size and each element is 4 bytes big, then this function must return 4.
source§

unsafe fn from_base_tag<'a>(tag: &Tag) -> &'a Self

Creates a reference to a (dynamically sized) tag type in a safe way. DST tags need to implement a proper Self::dst_size implementation. Read more
§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.