pub enum TagEncoding<VariantIdx: Idx> {
Direct,
Niche {
untagged_variant: VariantIdx,
niche_variants: RangeInclusive<VariantIdx>,
niche_start: u128,
},
}
Variants§
Direct
The tag directly stores the discriminant, but possibly with a smaller layout (so converting the tag to the discriminant can require sign extension).
Niche
Niche (values invalid for a type) encoding the discriminant:
Discriminant and variant index coincide.
The variant untagged_variant
contains a niche at an arbitrary
offset (field tag_field
of the enum), which for a variant with
discriminant d
is set to
(d - niche_variants.start).wrapping_add(niche_start)
.
For example, Option<(usize, &T)>
is represented such that
None
has a null pointer for the second tuple field, and
Some
is the identity function (with a non-null reference).
Trait Implementations§
Source§impl<VariantIdx: Clone + Idx> Clone for TagEncoding<VariantIdx>
impl<VariantIdx: Clone + Idx> Clone for TagEncoding<VariantIdx>
Source§fn clone(&self) -> TagEncoding<VariantIdx>
fn clone(&self) -> TagEncoding<VariantIdx>
Returns a copy of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreimpl<VariantIdx: Eq + Idx> Eq for TagEncoding<VariantIdx>
impl<VariantIdx: Idx> StructuralPartialEq for TagEncoding<VariantIdx>
Auto Trait Implementations§
impl<VariantIdx> Freeze for TagEncoding<VariantIdx>where
VariantIdx: Freeze,
impl<VariantIdx> RefUnwindSafe for TagEncoding<VariantIdx>where
VariantIdx: RefUnwindSafe,
impl<VariantIdx> Send for TagEncoding<VariantIdx>where
VariantIdx: Send,
impl<VariantIdx> Sync for TagEncoding<VariantIdx>where
VariantIdx: Sync,
impl<VariantIdx> Unpin for TagEncoding<VariantIdx>where
VariantIdx: Unpin,
impl<VariantIdx> UnwindSafe for TagEncoding<VariantIdx>where
VariantIdx: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more