Enum rustc_target::abi::TagEncoding
source · [−]pub enum TagEncoding {
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
sourceimpl Debug for TagEncoding
impl Debug for TagEncoding
sourceimpl Hash for TagEncoding
impl Hash for TagEncoding
sourceimpl<__CTX> HashStable<__CTX> for TagEncodingwhere
__CTX: HashStableContext,
impl<__CTX> HashStable<__CTX> for TagEncodingwhere
__CTX: HashStableContext,
fn hash_stable(&self, __hcx: &mut __CTX, __hasher: &mut StableHasher)
sourceimpl PartialEq<TagEncoding> for TagEncoding
impl PartialEq<TagEncoding> for TagEncoding
sourcefn eq(&self, other: &TagEncoding) -> bool
fn eq(&self, other: &TagEncoding) -> bool
impl Eq for TagEncoding
impl StructuralEq for TagEncoding
impl StructuralPartialEq for TagEncoding
Auto Trait Implementations
impl RefUnwindSafe for TagEncoding
impl Send for TagEncoding
impl Sync for TagEncoding
impl Unpin for TagEncoding
impl UnwindSafe for TagEncoding
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
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: 32 bytes
Size for each variant:
Direct
: 0 bytesNiche
: 32 bytes