[][src]Struct ptr_union::Union4

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

A pointer union of three or four pointer types.

This is a tagged union of two pointer types such as Box<T>, Arc<T>, or &T that is only as big as a 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 (#[repr(align(4))]). This is enforced through the use of UnionBuilder.

The last type may be omitted for a three pointer union. Just specify a Union4<A, B, C> instead of Union4<A, B, C, D>. The used NeverPtr type will be changed to ! once it stabilizes. 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,
    proof: UnionBuilder<Union4<&'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.

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

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 by dereferencing must align to at least u32 (4 bytes).

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> Copy for Union4<A, B, C, D> where
    A: Copy,
    B: Copy,
    C: Copy,
    D: Copy
[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> 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> 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]

Auto Trait Implementations

impl<A, B, C, D = NeverPtr> !Send for Union4<A, B, C, D>

impl<A, B, C, D = NeverPtr> !Sync for Union4<A, B, C, D>

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.