ArcUnion

Struct ArcUnion 

Source
pub struct ArcUnion<A, B> { /* private fields */ }
Expand description

A tagged union that can represent Arc<A> or Arc<B> while only consuming a single word. The type is also NonNull, and thus can be stored in an Option without increasing size.

This is functionally equivalent to enum ArcUnion<A, B> { First(Arc<A>), Second(Arc<B>) but only takes up up a single word of stack space.

This could probably be extended to support four types if necessary.

Implementations§

Source§

impl<A, B> ArcUnion<A, B>

Source

pub fn ptr_eq(this: &Self, other: &Self) -> bool

Returns true if the two values are pointer-equal.

Source

pub fn strong_count(this: &Self) -> usize

Reference count.

Source

pub fn borrow(&self) -> ArcUnionBorrow<'_, A, B>

Returns an enum representing a borrow of either A or B.

Source

pub fn from_first(other: Arc<A>) -> Self

Creates an ArcUnion from an instance of the first type.

Source

pub fn from_second(other: Arc<B>) -> Self

Creates an ArcUnion from an instance of the second type.

Source

pub fn is_first(&self) -> bool

Returns true if this ArcUnion contains the first type.

Source

pub fn is_second(&self) -> bool

Returns true if this ArcUnion contains the second type.

Source

pub fn as_first(&self) -> Option<ArcBorrow<'_, A>>

Returns a borrow of the first type if applicable, otherwise None.

Source

pub fn as_second(&self) -> Option<ArcBorrow<'_, B>>

Returns a borrow of the second type if applicable, otherwise None.

Trait Implementations§

Source§

impl<A, B> Clone for ArcUnion<A, B>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<A: Debug, B: Debug> Debug for ArcUnion<A, B>

Source§

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

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

impl<A, B> Drop for ArcUnion<A, B>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl<A: PartialEq, B: PartialEq> PartialEq for ArcUnion<A, B>

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: Sync + Send, B: Send + Sync> Send for ArcUnion<A, B>

Source§

impl<A: Sync + Send, B: Send + Sync> Sync for ArcUnion<A, B>

Auto Trait Implementations§

§

impl<A, B> Freeze for ArcUnion<A, B>

§

impl<A, B> RefUnwindSafe for ArcUnion<A, B>

§

impl<A, B> Unpin for ArcUnion<A, B>
where A: Unpin, B: Unpin,

§

impl<A, B> UnwindSafe for ArcUnion<A, B>
where A: UnwindSafe, B: UnwindSafe,

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = Infallible

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

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

Performs the conversion.
Source§

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

Source§

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

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

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

Performs the conversion.

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 8 bytes