Enum rustc_abi::TagEncoding
source · 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>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<VariantIdx, __CTX> HashStable<__CTX> for TagEncoding<VariantIdx>where
__CTX: HashStableContext,
VariantIdx: HashStable<__CTX> + Idx,
impl<VariantIdx, __CTX> HashStable<__CTX> for TagEncoding<VariantIdx>where __CTX: HashStableContext, VariantIdx: HashStable<__CTX> + Idx,
fn hash_stable(&self, __hcx: &mut __CTX, __hasher: &mut StableHasher)
source§impl<VariantIdx: PartialEq + Idx> PartialEq<TagEncoding<VariantIdx>> for TagEncoding<VariantIdx>
impl<VariantIdx: PartialEq + Idx> PartialEq<TagEncoding<VariantIdx>> for TagEncoding<VariantIdx>
source§fn eq(&self, other: &TagEncoding<VariantIdx>) -> bool
fn eq(&self, other: &TagEncoding<VariantIdx>) -> bool
self
and other
values to be equal, and is used
by ==
.impl<VariantIdx: Eq + Idx> Eq for TagEncoding<VariantIdx>
impl<VariantIdx: Idx> StructuralEq for TagEncoding<VariantIdx>
impl<VariantIdx: Idx> StructuralPartialEq for TagEncoding<VariantIdx>
Auto Trait Implementations§
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
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.