Enum rustc_abi::TagEncoding
source · pub enum TagEncoding<V: Idx> {
Direct,
Niche {
untagged_variant: V,
niche_variants: RangeInclusive<V>,
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<V: Clone + Idx> Clone for TagEncoding<V>
impl<V: Clone + Idx> Clone for TagEncoding<V>
source§fn clone(&self) -> TagEncoding<V>
fn clone(&self) -> TagEncoding<V>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<V, __CTX> HashStable<__CTX> for TagEncoding<V>where
__CTX: HashStableContext,
V: HashStable<__CTX> + Idx,
impl<V, __CTX> HashStable<__CTX> for TagEncoding<V>where
__CTX: HashStableContext,
V: HashStable<__CTX> + Idx,
fn hash_stable(&self, __hcx: &mut __CTX, __hasher: &mut StableHasher)
source§impl<V: PartialEq + Idx> PartialEq<TagEncoding<V>> for TagEncoding<V>
impl<V: PartialEq + Idx> PartialEq<TagEncoding<V>> for TagEncoding<V>
source§fn eq(&self, other: &TagEncoding<V>) -> bool
fn eq(&self, other: &TagEncoding<V>) -> bool
impl<V: Eq + Idx> Eq for TagEncoding<V>
impl<V: Idx> StructuralEq for TagEncoding<V>
impl<V: Idx> StructuralPartialEq for TagEncoding<V>
Auto Trait Implementations§
impl<V> RefUnwindSafe for TagEncoding<V>where
V: RefUnwindSafe,
impl<V> Send for TagEncoding<V>where
V: Send,
impl<V> Sync for TagEncoding<V>where
V: Sync,
impl<V> Unpin for TagEncoding<V>where
V: Unpin,
impl<V> UnwindSafe for TagEncoding<V>where
V: UnwindSafe,
Blanket Implementations§
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.