pub struct Discriminant<CVar = Vec<u8>, COff = Vec<u64>> {
pub variant: CVar,
pub offset: COff,
}Expand description
Tracks variant discriminants and offsets for enum containers.
Uses two arrays (variant and offset) with three states:
- Empty: both arrays empty, length is 0.
- Homogeneous:
variantis empty,offsetholds[tag, count]wheretag = variant_index + 1. All elements share a single variant with identity offsets (elementimaps to offseti). - Heterogeneous:
varianthas per-element discriminants (u8),offsethas per-element offsets into variant containers (u64).
Fields§
§variant: CVarPer-element variant discriminants; empty when homogeneous.
offset: COffPer-element offsets (heterogeneous), or [tag, count] (homogeneous), or empty.
Implementations§
Source§impl Discriminant
impl Discriminant
Source§impl<CVar: Len, COff: Len> Discriminant<CVar, COff>
impl<CVar: Len, COff: Len> Discriminant<CVar, COff>
Sourcepub fn is_heterogeneous(&self) -> bool
pub fn is_heterogeneous(&self) -> bool
True if elements have mixed variants, with per-element discriminants and offsets.
Sourcepub fn homogeneous(&self) -> Option<u8>
pub fn homogeneous(&self) -> Option<u8>
Returns Some(variant) if all elements share a single variant.
Trait Implementations§
Source§impl Borrow for Discriminant
impl Borrow for Discriminant
Source§type Borrowed<'a> = Discriminant<&'a [u8], &'a [u64]>
type Borrowed<'a> = Discriminant<&'a [u8], &'a [u64]>
The type of a borrowed container. Read more
Source§fn borrow<'a>(&'a self) -> Self::Borrowed<'a>
fn borrow<'a>(&'a self) -> Self::Borrowed<'a>
Converts a reference to the type to a borrowed variant. Read more
Source§fn reborrow<'b, 'a: 'b>(thing: Self::Borrowed<'a>) -> Self::Borrowed<'b>
fn reborrow<'b, 'a: 'b>(thing: Self::Borrowed<'a>) -> Self::Borrowed<'b>
Reborrows the borrowed type to a shorter lifetime. See
Columnar::reborrow for details.Source§fn reborrow_ref<'b, 'a: 'b>(thing: Self::Ref<'a>) -> Self::Ref<'b>
fn reborrow_ref<'b, 'a: 'b>(thing: Self::Ref<'a>) -> Self::Ref<'b>
Reborrows the borrowed type to a shorter lifetime. See
Columnar::reborrow for details.Source§impl<CVar: Clone, COff: Clone> Clone for Discriminant<CVar, COff>
impl<CVar: Clone, COff: Clone> Clone for Discriminant<CVar, COff>
Source§fn clone(&self) -> Discriminant<CVar, COff>
fn clone(&self) -> Discriminant<CVar, COff>
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<CVar: Default, COff: Default> Default for Discriminant<CVar, COff>
impl<CVar: Default, COff: Default> Default for Discriminant<CVar, COff>
Source§fn default() -> Discriminant<CVar, COff>
fn default() -> Discriminant<CVar, COff>
Returns the “default value” for a type. Read more
Source§impl<'a> FromBytes<'a> for Discriminant<&'a [u8], &'a [u64]>
impl<'a> FromBytes<'a> for Discriminant<&'a [u8], &'a [u64]>
Source§const SLICE_COUNT: usize
const SLICE_COUNT: usize
The number of byte slices this type consumes when reconstructed.
Source§fn from_bytes(bytes: &mut impl Iterator<Item = &'a [u8]>) -> Self
fn from_bytes(bytes: &mut impl Iterator<Item = &'a [u8]>) -> Self
Reconstructs
self from a sequence of correctly aligned and sized bytes slices. Read moreSource§fn from_store(store: &DecodedStore<'a>, offset: &mut usize) -> Self
fn from_store(store: &DecodedStore<'a>, offset: &mut usize) -> Self
Source§impl<'a> Index for Discriminant<&'a [u8], &'a [u64]>
impl<'a> Index for Discriminant<&'a [u8], &'a [u64]>
impl<CVar: Copy, COff: Copy> Copy for Discriminant<CVar, COff>
impl<CVar, COff> StructuralPartialEq for Discriminant<CVar, COff>
Auto Trait Implementations§
impl<CVar, COff> Freeze for Discriminant<CVar, COff>
impl<CVar, COff> RefUnwindSafe for Discriminant<CVar, COff>where
CVar: RefUnwindSafe,
COff: RefUnwindSafe,
impl<CVar, COff> Send for Discriminant<CVar, COff>
impl<CVar, COff> Sync for Discriminant<CVar, COff>
impl<CVar, COff> Unpin for Discriminant<CVar, COff>
impl<CVar, COff> UnsafeUnpin for Discriminant<CVar, COff>where
CVar: UnsafeUnpin,
COff: UnsafeUnpin,
impl<CVar, COff> UnwindSafe for Discriminant<CVar, COff>where
CVar: UnwindSafe,
COff: UnwindSafe,
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