Enum rustc_target::abi::TagEncoding [−][src]
pub enum TagEncoding {
Direct,
Niche {
dataful_variant: VariantIdx,
niche_variants: RangeInclusive<VariantIdx>,
niche_start: u128,
},
}
Variants
The tag directly stores the discriminant, but possibly with a smaller layout (so converting the tag to the discriminant can require sign extension).
Niche (values invalid for a type) encoding the discriminant:
Discriminant and variant index coincide.
The variant dataful_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).
Fields of Niche
Trait Implementations
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
This method tests for !=
.
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
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