[][src]Struct ptr_union::Union4

pub struct Union4<A: ErasablePtr, B: ErasablePtr, C: ErasablePtr, D: ErasablePtr = NeverPtr> { /* fields omitted */ }

A pointer union of four pointer types.

This is a tagged union of four pointer types such as Box, Arc, or & that is only as big as a single pointer. This is accomplished by storing the tag in the alignment bits of the pointer.

As such, the pointer must be aligned to at least u32 (align(4)). This is enforced through the use of Builder4.

The fourth pointer type may be omitted to create a three pointer union. The default type, NeverPtr, will be an alias for ! once it is stable. This will not be considered a breaking change.

Methods

impl<A: ErasablePtr, B: ErasablePtr, C: ErasablePtr, D: ErasablePtr> Union4<A, B, C, D>[src]

pub fn is_a(&self) -> bool[src]

Check if the union is this variant.

pub fn into_a(self) -> Result<A, Self>[src]

Extract this variant from the union.

Returns the union on error.

pub fn with_a<R>(&self, f: impl FnOnce(&A) -> R) -> Option<R>[src]

Run a closure with this variant.

pub fn a(&self) -> Option<&A::Target> where
    A: Deref
[src]

Get a reference to this variant's target.

pub fn clone_a(&self) -> Option<A> where
    A: Clone
[src]

Clone this variant out of the union.

pub fn copy_a(&self) -> Option<A> where
    A: Copy
[src]

Copy this variant out of the union.

pub fn is_b(&self) -> bool[src]

Check if the union is this variant.

pub fn into_b(self) -> Result<B, Self>[src]

Extract this variant from the union.

Returns the union on error.

pub fn with_b<R>(&self, f: impl FnOnce(&B) -> R) -> Option<R>[src]

Run a closure with this variant.

pub fn b(&self) -> Option<&B::Target> where
    B: Deref
[src]

Get a reference to this variant's target.

pub fn clone_b(&self) -> Option<B> where
    B: Clone
[src]

Clone this variant out of the union.

pub fn copy_b(&self) -> Option<B> where
    B: Copy
[src]

Copy this variant out of the union.

pub fn is_c(&self) -> bool[src]

Check if the union is this variant.

pub fn into_c(self) -> Result<C, Self>[src]

Extract this variant from the union.

Returns the union on error.

pub fn with_c<R>(&self, f: impl FnOnce(&C) -> R) -> Option<R>[src]

Run a closure with this variant.

pub fn c(&self) -> Option<&C::Target> where
    C: Deref
[src]

Get a reference to this variant's target.

pub fn clone_c(&self) -> Option<C> where
    C: Clone
[src]

Clone this variant out of the union.

pub fn copy_c(&self) -> Option<C> where
    C: Copy
[src]

Copy this variant out of the union.

pub fn is_d(&self) -> bool[src]

Check if the union is this variant.

pub fn into_d(self) -> Result<D, Self>[src]

Extract this variant from the union.

Returns the union on error.

pub fn with_d<R>(&self, f: impl FnOnce(&D) -> R) -> Option<R>[src]

Run a closure with this variant.

pub fn d(&self) -> Option<&D::Target> where
    D: Deref
[src]

Get a reference to this variant's target.

pub fn clone_d(&self) -> Option<D> where
    D: Clone
[src]

Clone this variant out of the union.

pub fn copy_d(&self) -> Option<D> where
    D: Copy
[src]

Copy this variant out of the union.

pub fn ptr_eq(&self, other: &Self) -> bool[src]

Check if two unions are the same variant and point to the same value (not that the values compare as equal).

pub fn as_deref<'a>(
    &'a self,
    builder: Builder4<&'a A::Target, &'a B::Target, &'a C::Target, &'a D::Target>
) -> Union4<&'a A::Target, &'a B::Target, &'a C::Target, &'a D::Target> where
    A: Deref,
    B: Deref,
    C: Deref,
    D: Deref,
    &'a A::Target: ErasablePtr,
    &'a B::Target: ErasablePtr,
    &'a C::Target: ErasablePtr,
    &'a D::Target: ErasablePtr
[src]

Dereference the current pointer.

pub unsafe fn as_deref_unchecked<'a>(
    &'a self
) -> Union4<&'a A::Target, &'a B::Target, &'a C::Target, &'a D::Target> where
    A: Deref,
    B: Deref,
    C: Deref,
    D: Deref,
    &'a A::Target: ErasablePtr,
    &'a B::Target: ErasablePtr,
    &'a C::Target: ErasablePtr,
    &'a D::Target: ErasablePtr
[src]

Dereference the current pointer.

Safety

The reference produced must be properly aligned. Note that only the actually produced reference is restricted, not the result of dereferencing any of the other types in this union.

pub fn unpack(self) -> Enum4<A, B, C, D>[src]

Unpack this union into an enum.

Trait Implementations

impl<A: ErasablePtr, B: ErasablePtr, C: ErasablePtr, D: ErasablePtr> Clone for Union4<A, B, C, D> where
    A: Clone,
    B: Clone,
    C: Clone,
    D: Clone
[src]

impl<A: ErasablePtr, B: ErasablePtr, C: ErasablePtr, D: ErasablePtr> Debug for Union4<A, B, C, D> where
    A: Debug,
    B: Debug,
    C: Debug,
    D: Debug
[src]

impl<A: ErasablePtr, B: ErasablePtr, C: ErasablePtr, D: ErasablePtr> Drop for Union4<A, B, C, D>[src]

impl<A: ErasablePtr, B: ErasablePtr, C: ErasablePtr, D: ErasablePtr> Eq for Union4<A, B, C, D> where
    A: Eq,
    B: Eq,
    C: Eq,
    D: Eq
[src]

impl<A: ErasablePtr, B: ErasablePtr, C: ErasablePtr, D: ErasablePtr> ErasablePtr for Union4<A, B, C, D>[src]

impl<A: ErasablePtr, B: ErasablePtr, C: ErasablePtr, D: ErasablePtr> Hash for Union4<A, B, C, D> where
    A: Hash,
    B: Hash,
    C: Hash,
    D: Hash
[src]

impl<A: ErasablePtr, B: ErasablePtr, C: ErasablePtr, D: ErasablePtr> PartialEq<Union4<A, B, C, D>> for Union4<A, B, C, D> where
    A: PartialEq,
    B: PartialEq,
    C: PartialEq,
    D: PartialEq
[src]

impl<A: ErasablePtr, B: ErasablePtr, C: ErasablePtr, D: ErasablePtr> Send for Union4<A, B, C, D> where
    A: Send,
    B: Send,
    C: Send,
    D: Send
[src]

impl<A: ErasablePtr, B: ErasablePtr, C: ErasablePtr, D: ErasablePtr> Sync for Union4<A, B, C, D> where
    A: Sync,
    B: Sync,
    C: Sync,
    D: Sync
[src]

Auto Trait Implementations

impl<A, B, C, D> Unpin for Union4<A, B, C, D> where
    A: Unpin,
    B: Unpin,
    C: Unpin,
    D: Unpin

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Erasable for T[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.