Lineage

Struct Lineage 

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

A type of cell that allows replacing the contained value without invalidating references to the current value.

Implementations§

Source§

impl<T> Lineage<T>

Source

pub fn new(value: T) -> Self

Creates a new Lineage with the provided value.

Source

pub fn get(&self) -> &T

Gets a reference to the current value.

Source

pub fn get_mut(&mut self) -> &mut T

Gets a mutable reference to the current value.

Performs better than get but requires &mut self.

Source

pub fn set(&self, value: T)

Replaces the value.

Replacing the value does not invalidate existing references to the previous value. The previous value is kept alive until you call clear or drop the Lineage. The new value is stored in a Box which causes a heap allocation.

Source

pub fn set_mut(&mut self, value: T)

Replaces the value.

Performs much better than set but requires &mut self. Does not cause a heap allocation. The implementation is a more optimized version of the following:

fn set_mut<T>(lineage: &mut Lineage<T>, value: T) {
    lineage.clear();
    *lineage.get_mut() = value;
}
Source

pub fn clear(&mut self)

Drops all past values. Does not affect the current value.

This can only be called if no references to any of the previous values exist anymore. This is ensured by the &mut self requirement. Should be called as often as possible to avoid having many past values kept alive unnecessarily.

Source

pub fn drain(&mut self) -> impl Iterator<Item = T>

Same as clear but returns ownership of past values.

The values are iterated over from newest to oldest. The iterator can safely be dropped, all remaining values in the iterator will be dropped.

Source

pub fn into_inner(self) -> T

Returns ownership of the current value.

Trait Implementations§

Source§

impl<T> Clone for Lineage<T>
where T: Clone,

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T> Debug for Lineage<T>
where T: Debug,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T> Default for Lineage<T>
where T: Default,

Source§

fn default() -> Self

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

impl<T> From<T> for Lineage<T>

Source§

fn from(value: T) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<T> !Freeze for Lineage<T>

§

impl<T> RefUnwindSafe for Lineage<T>
where T: RefUnwindSafe,

§

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

§

impl<T> Sync for Lineage<T>
where T: Sync + Send,

§

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

§

impl<T> UnwindSafe for Lineage<T>

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<!> for T

Source§

fn from(t: !) -> T

Converts to this type from the input type.
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.