pub enum DiscriminantStrategy {
Separate {
tag_offset: u32,
tag_width: u8,
payload_offset: u32,
},
Niche {
unit_variant: u32,
data_variant: u32,
niche_offset: u32,
niche_width: u8,
niche_value: u128,
},
}Expand description
How an enum encodes its discriminant within its storage.
Returned by Layout::discriminant_strategy for enum types. The constructor
and match-dispatch in codegen consult this to decide where to read/write the
tag.
Variants§
Separate
Standard tagged union: discriminant lives in its own slot at
tag_offset, with payload following at payload_offset.
In LLVM this is the { discrim, [N x i8] } struct shape used today
(tag_offset = 0, payload_offset = tag_width).
Fields
Niche
Niche-encoded: no separate discriminant slot. The unit variant is
identified by reading niche_width bytes at niche_offset and seeing
niche_value; any other bit pattern means the data variant.
Reserved for Phase 5+ of ADR-0069.
Fields
Trait Implementations§
Source§impl Clone for DiscriminantStrategy
impl Clone for DiscriminantStrategy
Source§fn clone(&self) -> DiscriminantStrategy
fn clone(&self) -> DiscriminantStrategy
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for DiscriminantStrategy
impl Debug for DiscriminantStrategy
Source§impl PartialEq for DiscriminantStrategy
impl PartialEq for DiscriminantStrategy
impl Copy for DiscriminantStrategy
impl Eq for DiscriminantStrategy
impl StructuralPartialEq for DiscriminantStrategy
Auto Trait Implementations§
impl Freeze for DiscriminantStrategy
impl RefUnwindSafe for DiscriminantStrategy
impl Send for DiscriminantStrategy
impl Sync for DiscriminantStrategy
impl Unpin for DiscriminantStrategy
impl UnsafeUnpin for DiscriminantStrategy
impl UnwindSafe for DiscriminantStrategy
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Checks if this value is equivalent to the given key. Read more
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<'src, T> IntoMaybe<'src, T> for Twhere
T: 'src,
impl<'src, T> IntoMaybe<'src, T> for Twhere
T: 'src,
§impl<'p, T> Seq<'p, T> for Twhere
T: Clone,
impl<'p, T> Seq<'p, T> for Twhere
T: Clone,
§type Iter<'a> = Once<&'a T>
where
T: 'a
type Iter<'a> = Once<&'a T> where T: 'a
An iterator over the items within this container, by reference.
§fn contains(&self, val: &T) -> boolwhere
T: PartialEq,
fn contains(&self, val: &T) -> boolwhere
T: PartialEq,
Check whether an item is contained within this sequence.
§fn to_maybe_ref<'b>(item: <T as Seq<'p, T>>::Item<'b>) -> Maybe<T, &'p T>where
'p: 'b,
fn to_maybe_ref<'b>(item: <T as Seq<'p, T>>::Item<'b>) -> Maybe<T, &'p T>where
'p: 'b,
Convert an item of the sequence into a [
MaybeRef].