Enum rustc_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§
source§impl Clone for TagEncoding
impl Clone for TagEncoding
source§fn clone(&self) -> TagEncoding
fn clone(&self) -> TagEncoding
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for TagEncoding
impl Debug for TagEncoding
source§impl Hash for TagEncoding
impl Hash for TagEncoding
source§impl<__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)
source§impl PartialEq<TagEncoding> for TagEncoding
impl PartialEq<TagEncoding> for TagEncoding
source§fn eq(&self, other: &TagEncoding) -> bool
fn eq(&self, other: &TagEncoding) -> bool
self
and other
values to be equal, and is used
by ==
.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§
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: 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