moveit::drop_flag

Struct DroppingFlag

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

A wrapper for managing when a value gets dropped via a DropFlag.

This type tracks the destruction state of some value relative to another value via its DropFlag: for example, it might be the storage of a value wrapped up in a MoveRef. When a DroppingFlag is destroyed, it will run the destructor for the wrapped value if and only if the DropFlag is dead.

This type can be viewed as using a DropFlag to “complete” a ManuallyDrop<T> by explicitly tracking whether it has been dropped. The flag can be used to signal whether to destroy or leak the value, but the destruction occurs lazily rather than immediately when the flag is flipped.

This is useful as an AsMove::Storage type for types where the storage should be leaked if the inner type was somehow not destroyed, such as in the case of heap-allocated storage like Box<T>.

Implementations§

Source§

impl<T> DroppingFlag<T>

Source

pub fn new(value: T) -> Self

Wraps a new value to have its drop state managed by a DropFlag.

The drop flag will start out dead and needs to be manually incremented.

Source

pub fn flag(slot: &Self) -> DropFlag<'_>

Gets a reference to the drop flag.

This function is safe; the returned reference to the drop flag cannot be used to make a previously dropped value live again.

Source

pub fn as_parts(slot: &Self) -> (&T, DropFlag<'_>)

Splits this slot into a reference to the wrapped value plus a reference to the drop flag.

This function is safe; the returned reference to the drop flag cannot be used to make a previously dropped value live again, since the value is not destroyed before the wrapper is.

Source

pub fn as_parts_mut(slot: &mut Self) -> (&mut T, DropFlag<'_>)

Splits this slot into a reference to the wrapped value plus a reference to the drop flag.

This function is safe; the returned reference to the drop flag cannot be used to make a previously dropped value live again, since the value is not destroyed before the wrapper is.

Trait Implementations§

Source§

impl<T> Deref for DroppingFlag<T>

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &T

Dereferences the value.
Source§

impl<T> DerefMut for DroppingFlag<T>

Source§

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

Mutably dereferences the value.
Source§

impl<T> Drop for DroppingFlag<T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<T> !Freeze for DroppingFlag<T>

§

impl<T> !RefUnwindSafe for DroppingFlag<T>

§

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

§

impl<T> !Sync for DroppingFlag<T>

§

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

§

impl<T> UnwindSafe for DroppingFlag<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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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.