Struct qcell::TCellOwner

source ·
pub struct TCellOwner<Q: 'static> { /* private fields */ }
Expand description

Borrowing-owner of zero or more TCell instances.

See crate documentation.

Implementations§

source§

impl<Q: 'static> TCellOwner<Q>

source

pub fn new() -> Self

Available on crate features std or exclusion-set only.

Create the singleton owner instance. Each owner may be used to create many TCell instances. There may be only one instance of this type per process at any given time for each different marker type Q. This call panics if a second simultaneous instance is created.

Keep in mind that in Rust, tests are run in parallel unless specified otherwise (using e.g. RUST_TEST_THREADS), so this panic may be more easy to trigger than you might think. To avoid this panic, consider using the methods TCellOwner::wait_for_new or TCellOwner::try_new instead.

source

pub fn try_new() -> Option<Self>

Available on crate features std or exclusion-set only.

Same as TCellOwner::new, except if another TCellOwner of this type Q already exists, this returns None instead of panicking.

source

pub fn wait_for_new() -> Self

Available on crate feature std, or crate features exclusion-set and std only.

Same as TCellOwner::new, except if another TCellOwner of this type Q already exists, this function blocks the thread until that other instance is dropped. This will of course deadlock if that other instance is owned by the same thread.

Note that owners are expected to be relatively long-lived. If you need to access cells associated with a given marker type from several different threads, the most efficient pattern is to have a single long-lived owner shared between threads, with a Mutex or RwLock to control access. This call is intended to help when several independent tests need to run which use the same marker type internally.

source

pub fn cell<T>(&self, value: T) -> TCell<Q, T>

Create a new cell owned by this owner instance. See also TCell::new.

source

pub fn ro<'a, T: ?Sized>(&'a self, tc: &'a TCell<Q, T>) -> &'a T

Borrow contents of a TCell immutably (read-only). Many TCell instances can be borrowed immutably at the same time from the same owner.

source

pub fn rw<'a, T: ?Sized>(&'a mut self, tc: &'a TCell<Q, T>) -> &'a mut T

Borrow contents of a TCell mutably (read-write). Only one TCell at a time can be borrowed from the owner using this call. The returned reference must go out of scope before another can be borrowed.

source

pub fn rw2<'a, T: ?Sized, U: ?Sized>( &'a mut self, tc1: &'a TCell<Q, T>, tc2: &'a TCell<Q, U> ) -> (&'a mut T, &'a mut U)

Borrow contents of two TCell instances mutably. Panics if the two TCell instances point to the same memory.

source

pub fn rw3<'a, T: ?Sized, U: ?Sized, V: ?Sized>( &'a mut self, tc1: &'a TCell<Q, T>, tc2: &'a TCell<Q, U>, tc3: &'a TCell<Q, V> ) -> (&'a mut T, &'a mut U, &'a mut V)

Borrow contents of three TCell instances mutably. Panics if any pair of TCell instances point to the same memory.

Trait Implementations§

source§

impl<Q: 'static> Default for TCellOwner<Q>

Available on crate features std or exclusion-set only.
source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<Q: 'static> Drop for TCellOwner<Q>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<Q> RefUnwindSafe for TCellOwner<Q>

§

impl<Q> Send for TCellOwner<Q>

§

impl<Q> Sync for TCellOwner<Q>

§

impl<Q> Unpin for TCellOwner<Q>

§

impl<Q> UnwindSafe for TCellOwner<Q>

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere 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 Twhere 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 Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.