Trait WithUnderlier

Source
pub unsafe trait WithUnderlier:
    Sized
    + Zeroable
    + Copy
    + Send
    + Sync
    + 'static {
    type Underlier: UnderlierType;

Show 17 methods // Required methods fn to_underlier(self) -> Self::Underlier; fn to_underlier_ref(&self) -> &Self::Underlier; fn to_underlier_ref_mut(&mut self) -> &mut Self::Underlier; fn to_underliers_ref(val: &[Self]) -> &[Self::Underlier]; fn to_underliers_ref_mut(val: &mut [Self]) -> &mut [Self::Underlier]; fn from_underlier(val: Self::Underlier) -> Self; fn from_underlier_ref(val: &Self::Underlier) -> &Self; fn from_underlier_ref_mut(val: &mut Self::Underlier) -> &mut Self; fn from_underliers_ref(val: &[Self::Underlier]) -> &[Self]; fn from_underliers_ref_mut(val: &mut [Self::Underlier]) -> &mut [Self]; // Provided methods fn to_underliers_arr<const N: usize>(val: [Self; N]) -> [Self::Underlier; N] { ... } fn to_underliers_arr_ref<const N: usize>( val: &[Self; N], ) -> &[Self::Underlier; N] { ... } fn to_underliers_arr_ref_mut<const N: usize>( val: &mut [Self; N], ) -> &mut [Self::Underlier; N] { ... } fn from_underliers_arr<const N: usize>( val: [Self::Underlier; N], ) -> [Self; N] { ... } fn from_underliers_arr_ref<const N: usize>( val: &[Self::Underlier; N], ) -> &[Self; N] { ... } fn from_underliers_arr_ref_mut<const N: usize>( val: &mut [Self::Underlier; N], ) -> &mut [Self; N] { ... } fn mutate_underlier( self, f: impl FnOnce(Self::Underlier) -> Self::Underlier, ) -> Self { ... }
}
Expand description

A type that is transparently backed by an underlier.

This trait is needed to make it possible getting the underlier type from already defined type. Bidirectional From trait implementations are not enough, because they do not allow getting underlier type in a generic code.

§Safety

WithUnderlier can be implemented for a type only if it’s representation is a transparent Underlier’s representation. That’s allows us casting references of type and it’s underlier in both directions.

Required Associated Types§

Source

type Underlier: UnderlierType

Underlier primitive type

Required Methods§

Source

fn to_underlier(self) -> Self::Underlier

Convert value to underlier.

Source

fn to_underlier_ref(&self) -> &Self::Underlier

Source

fn to_underlier_ref_mut(&mut self) -> &mut Self::Underlier

Source

fn to_underliers_ref(val: &[Self]) -> &[Self::Underlier]

Source

fn to_underliers_ref_mut(val: &mut [Self]) -> &mut [Self::Underlier]

Source

fn from_underlier(val: Self::Underlier) -> Self

Source

fn from_underlier_ref(val: &Self::Underlier) -> &Self

Source

fn from_underlier_ref_mut(val: &mut Self::Underlier) -> &mut Self

Source

fn from_underliers_ref(val: &[Self::Underlier]) -> &[Self]

Source

fn from_underliers_ref_mut(val: &mut [Self::Underlier]) -> &mut [Self]

Provided Methods§

Source

fn to_underliers_arr<const N: usize>(val: [Self; N]) -> [Self::Underlier; N]

Source

fn to_underliers_arr_ref<const N: usize>( val: &[Self; N], ) -> &[Self::Underlier; N]

Source

fn to_underliers_arr_ref_mut<const N: usize>( val: &mut [Self; N], ) -> &mut [Self::Underlier; N]

Source

fn from_underliers_arr<const N: usize>(val: [Self::Underlier; N]) -> [Self; N]

Source

fn from_underliers_arr_ref<const N: usize>( val: &[Self::Underlier; N], ) -> &[Self; N]

Source

fn from_underliers_arr_ref_mut<const N: usize>( val: &mut [Self::Underlier; N], ) -> &mut [Self; N]

Source

fn mutate_underlier( self, f: impl FnOnce(Self::Underlier) -> Self::Underlier, ) -> Self

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl WithUnderlier for AESTowerField8b

Source§

impl WithUnderlier for AESTowerField16b

Source§

impl WithUnderlier for AESTowerField32b

Source§

impl WithUnderlier for AESTowerField64b

Source§

impl WithUnderlier for AESTowerField128b

Source§

impl WithUnderlier for BinaryField1b

Source§

impl WithUnderlier for BinaryField2b

Source§

impl WithUnderlier for BinaryField4b

Source§

impl WithUnderlier for BinaryField8b

Source§

impl WithUnderlier for BinaryField16b

Source§

impl WithUnderlier for BinaryField32b

Source§

impl WithUnderlier for BinaryField64b

Source§

impl WithUnderlier for BinaryField128b

Source§

impl WithUnderlier for BinaryField128bPolyval

Source§

impl WithUnderlier for ByteSliced1x128x1b

Source§

type Underlier = ByteSlicedUnderlier<<PackedPrimitiveType<M128, BinaryField1b> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSliced1x256x1b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<PackedPrimitiveType<M128, BinaryField1b>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSliced1x512x1b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<ScaledPackedField<PackedPrimitiveType<M128, BinaryField1b>, 2>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSliced2x128x1b

Source§

type Underlier = ByteSlicedUnderlier<<PackedPrimitiveType<M128, BinaryField1b> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSliced2x256x1b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<PackedPrimitiveType<M128, BinaryField1b>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSliced2x512x1b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<ScaledPackedField<PackedPrimitiveType<M128, BinaryField1b>, 2>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSliced4x128x1b

Source§

type Underlier = ByteSlicedUnderlier<<PackedPrimitiveType<M128, BinaryField1b> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSliced4x256x1b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<PackedPrimitiveType<M128, BinaryField1b>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSliced4x512x1b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<ScaledPackedField<PackedPrimitiveType<M128, BinaryField1b>, 2>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSliced8x128x1b

Source§

type Underlier = ByteSlicedUnderlier<<PackedPrimitiveType<M128, BinaryField1b> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSliced8x256x1b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<PackedPrimitiveType<M128, BinaryField1b>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSliced8x512x1b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<ScaledPackedField<PackedPrimitiveType<M128, BinaryField1b>, 2>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSliced16x128x1b

Source§

type Underlier = ByteSlicedUnderlier<<PackedPrimitiveType<M128, BinaryField1b> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSliced16x256x1b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<PackedPrimitiveType<M128, BinaryField1b>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSliced16x512x1b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<ScaledPackedField<PackedPrimitiveType<M128, BinaryField1b>, 2>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES2x16x64b

Source§

type Underlier = ByteSlicedUnderlier<<PackedPrimitiveType<M128, AESTowerField8b> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES2x32x64b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES2x64x64b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES4x16x32b

Source§

type Underlier = ByteSlicedUnderlier<<PackedPrimitiveType<M128, AESTowerField8b> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES4x32x32b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES4x64x32b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES8x16x16b

Source§

type Underlier = ByteSlicedUnderlier<<PackedPrimitiveType<M128, AESTowerField8b> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES8x32x16b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES8x64x16b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES16x8b

Source§

type Underlier = ByteSlicedUnderlier<<PackedPrimitiveType<M128, AESTowerField8b> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES16x16b

Source§

type Underlier = ByteSlicedUnderlier<<PackedPrimitiveType<M128, AESTowerField8b> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES16x16x8b

Source§

type Underlier = ByteSlicedUnderlier<<PackedPrimitiveType<M128, AESTowerField8b> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES16x32b

Source§

type Underlier = ByteSlicedUnderlier<<PackedPrimitiveType<M128, AESTowerField8b> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES16x32x8b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES16x64b

Source§

type Underlier = ByteSlicedUnderlier<<PackedPrimitiveType<M128, AESTowerField8b> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES16x64x8b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES16x128b

Source§

type Underlier = ByteSlicedUnderlier<<PackedPrimitiveType<M128, AESTowerField8b> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES32x8b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES32x16b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES32x32b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES32x64b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES32x128b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES64x8b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES64x16b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES64x32b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES64x64b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl WithUnderlier for ByteSlicedAES64x128b

Source§

type Underlier = ByteSlicedUnderlier<<ScaledPackedField<ScaledPackedField<PackedPrimitiveType<M128, AESTowerField8b>, 2>, 2> as WithUnderlier>::Underlier, { <$storage_level as TowerLevel>::WIDTH }>

Source§

impl<U: UnderlierType> WithUnderlier for U