ariel_os::cell

Struct ConstStaticCell

pub struct ConstStaticCell<T> { /* private fields */ }
Expand description

Statically allocated and initialized, taken at runtime cell.

It has two states: “untaken” and “taken”. It is created “untaken”, and obtaining a reference to the contents permanently changes it to “taken”. This allows that reference to be valid forever.

If your value can be const defined, for example a large, zero filled buffer used for DMA or other scratch memory usage, ConstStaticCell can be used to guarantee the initializer will never take up stack memory.

If your values are all zero initialized, the resulting ConstStaticCell should be placed in .bss, not taking flash space for initialization either.

See the crate-level docs for usage.

Implementations§

§

impl<T> ConstStaticCell<T>

pub const fn new(value: T) -> ConstStaticCell<T>

Available on crate feature threading only.

Create a new, empty ConstStaticCell.

It can be taken at runtime with ConstStaticCell::take() or similar methods.

pub fn take(&'static self) -> &'static mut T

Available on crate feature threading only.

Take the ConstStaticCell, returning a mutable reference to it.

§Panics

Panics if this ConstStaticCell was already taken.

pub fn try_take(&'static self) -> Option<&'static mut T>

Available on crate feature threading only.

Try to take the ConstStaticCell, returning None if it was already taken

Trait Implementations§

§

impl<T> Send for ConstStaticCell<T>

§

impl<T> Sync for ConstStaticCell<T>

Auto Trait Implementations§

§

impl<T> !Freeze for ConstStaticCell<T>

§

impl<T> !RefUnwindSafe for ConstStaticCell<T>

§

impl<T> Unpin for ConstStaticCell<T>
where T: Unpin,

§

impl<T> UnwindSafe for ConstStaticCell<T>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

§

const WITNESS: W = W::MAKE

A constant of the type witness
§

impl<T> Identity for T
where T: ?Sized,

§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V