Skip to main content

AsPackedValue

Trait AsPackedValue 

Source
pub unsafe trait AsPackedValue: Sized {
    const MIN_BIT_WIDTH: usize;

    // Required methods
    fn encode(zelf: Self) -> TruncatedU64<Self>;
    unsafe fn decode(raw: TruncatedU64<Self>) -> Self;

    // Provided method
    fn is_rt_safe() -> bool { ... }
}
Expand description

This trait is used to store the value in a Slot. The slot may truncate the value to MIN_BIT_WIDTH bits. Types implementing AsPackedValue may be stored in slots with MAX_CARGO_BIT_WIDTH >= MIN_BIT_WIDTH. This will be checked at compile time. MIN_BIT_WIDTH cannot be larger than 64

§SAFETY

  • both decode and encode must be atomic and non-blocking
  • decode must only be called on a value returned by encode
  • the encoded value must be reconstructable fully from the lower MIN_BIT_WIDTH bits

Required Associated Constants§

Source

const MIN_BIT_WIDTH: usize

The minimal bit width from which this type may be reconstructed.

Required Methods§

Source

fn encode(zelf: Self) -> TruncatedU64<Self>

Truncates Self to the lower MIN_BIT_WIDTH bits. The caller is responsible for reconstructing this value usign decode

Source

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Reconstructs Self from the lower MIN_BIT_WIDTH bits returned by encode.

§SAFETY

The caller must ensure that the passed value is a valid value returned by encode

Provided Methods§

Source

fn is_rt_safe() -> bool

Validates wether self is actually safe to pack into Self::MIN_BIT_WIDTH bits at runtime.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl AsPackedValue for ()

Source§

const MIN_BIT_WIDTH: usize = 0

Source§

fn encode(_zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(_raw: TruncatedU64<Self>) -> Self

Source§

impl AsPackedValue for NonZeroI8

Source§

const MIN_BIT_WIDTH: usize

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

impl AsPackedValue for NonZeroI16

Source§

const MIN_BIT_WIDTH: usize

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

impl AsPackedValue for NonZeroI32

Source§

const MIN_BIT_WIDTH: usize

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

impl AsPackedValue for NonZeroU8

Source§

const MIN_BIT_WIDTH: usize

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

impl AsPackedValue for NonZeroU16

Source§

const MIN_BIT_WIDTH: usize

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

impl AsPackedValue for NonZeroU32

Source§

const MIN_BIT_WIDTH: usize

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

impl AsPackedValue for i8

Source§

const MIN_BIT_WIDTH: usize

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

impl AsPackedValue for i16

Source§

const MIN_BIT_WIDTH: usize

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

impl AsPackedValue for i32

Source§

const MIN_BIT_WIDTH: usize

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

impl AsPackedValue for u8

Source§

const MIN_BIT_WIDTH: usize

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

impl AsPackedValue for u16

Source§

const MIN_BIT_WIDTH: usize

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

impl AsPackedValue for u32

Source§

const MIN_BIT_WIDTH: usize

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

impl<T> AsPackedValue for &'static T

Source§

const MIN_BIT_WIDTH: usize = 48

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

fn is_rt_safe() -> bool

Source§

impl<T> AsPackedValue for &'static mut T

Source§

const MIN_BIT_WIDTH: usize = 48

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

fn is_rt_safe() -> bool

Source§

impl<T> AsPackedValue for *const T
where T: Sized,

Source§

const MIN_BIT_WIDTH: usize = 48

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

fn is_rt_safe() -> bool

Source§

impl<T> AsPackedValue for *mut T
where T: Sized,

Source§

const MIN_BIT_WIDTH: usize = 48

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

fn is_rt_safe() -> bool

Source§

impl<T> AsPackedValue for Arc<T>

Source§

const MIN_BIT_WIDTH: usize = 48

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

fn is_rt_safe() -> bool

Source§

impl<T> AsPackedValue for Box<T>

Source§

const MIN_BIT_WIDTH: usize = 48

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

fn is_rt_safe() -> bool

Source§

impl<T> AsPackedValue for NonNull<T>
where T: Sized,

Source§

const MIN_BIT_WIDTH: usize = 48

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

fn is_rt_safe() -> bool

Source§

impl<T> AsPackedValue for Rc<T>

Source§

const MIN_BIT_WIDTH: usize = 48

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

fn is_rt_safe() -> bool

Source§

impl<T> AsPackedValue for Weak<T>

Source§

const MIN_BIT_WIDTH: usize = 48

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

fn is_rt_safe() -> bool

Source§

impl<T> AsPackedValue for Weak<T>

Source§

const MIN_BIT_WIDTH: usize = 48

Source§

fn encode(zelf: Self) -> TruncatedU64<Self>

Source§

unsafe fn decode(raw: TruncatedU64<Self>) -> Self

Source§

fn is_rt_safe() -> bool

Implementors§