Struct SharedSingleton

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

Single producer Single consumer Shared Singleton Note that different from RefCell, the shared singleton cannot be read until written by the producer

The inner UnsafeCell can be replaced by RefCell is a much more sophisticated implementation with checks for multiple borrows. Here this version removes the safeguards assuming users handle the rest. The only protection is the tristate owner flag which does not allow allocating for write more than once before commit

Implementations§

Source§

impl<T> SharedSingleton<T>

Source

pub const INIT_0: SharedSingleton<T>

Source

pub const fn new() -> Self

Source

pub fn is_vacant(&self) -> bool

Source

pub fn try_write(&self) -> Option<&mut T>

Returns mutable reference of T if singleton is vacant

Source

pub fn write_done(&self) -> Result<(), ErrCode>

Pass ownership to Consumer from Producer

Source

pub fn try_read(&self) -> Option<&T>

Returns &T is location is owned by Consumer otherwise None NOTE: does not check for multiple calls

Source

pub fn read_done(&self) -> Result<(), ErrCode>

Release location back to Producer

Trait Implementations§

Auto Trait Implementations§

§

impl<T> !Freeze for SharedSingleton<T>

§

impl<T> !RefUnwindSafe for SharedSingleton<T>

§

impl<T> Send for SharedSingleton<T>
where T: Send,

§

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

§

impl<T> UnwindSafe for SharedSingleton<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.

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, 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.