zng_handle

Struct Handle

source
pub struct Handle<D: Send + Sync>(/* private fields */);
Expand description

Represents a resource handle.

The resource stays in memory as long as a handle clone is alive. After the handle is dropped the resource will be removed after an indeterminate time at the discretion of the resource manager.

You can forget a handle by calling perm, this releases the handle memory but the resource stays alive for the duration of the app, unlike calling std::mem::forget no memory is leaked.

Any handle can also force_drop, meaning that even if there are various handles active the resource will be dropped regardless.

The parameter type D is any Sync data type that will be shared using the handle.

Implementations§

source§

impl<D: Send + Sync> Handle<D>

source

pub fn new(data: D) -> (HandleOwner<D>, Handle<D>)

Create a handle with owner pair.

source

pub fn dummy(data: D) -> Self

Create a handle to nothing, the handle always in the dropped state.

Note that Option<Handle<D>> takes up the same space as Handle<D> and avoids an allocation.

source

pub fn data(&self) -> &D

Reference the attached data.

source

pub fn perm(self)

Mark the handle as permanent and drops this clone of it. This causes the resource to stay in memory until the app exits, no need to hold a handle somewhere.

source

pub fn is_permanent(&self) -> bool

If perm was called in another clone of this handle.

If true the resource will stay in memory for the duration of the app, unless force_drop is also called.

source

pub fn force_drop(self)

Force drops the handle, meaning the resource will be dropped even if there are other handles active.

source

pub fn is_dropped(&self) -> bool

If the handle is in dropped state.

The handle is considered dropped when all handle and clones are dropped or when force_drop was called in any of the clones.

Note that in this method it can only be because force_drop was called.

source

pub fn downgrade(&self) -> WeakHandle<D>

Create a WeakHandle to this handle.

Trait Implementations§

source§

impl<D: Send + Sync> Clone for Handle<D>

source§

fn clone(&self) -> Self

Returns a copy 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<D: Send + Sync> Debug for Handle<D>

source§

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

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

impl<D: Send + Sync> Drop for Handle<D>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<D: Send + Sync> Hash for Handle<D>

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<D: Send + Sync> PartialEq for Handle<D>

source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<D: Send + Sync> Eq for Handle<D>

Auto Trait Implementations§

§

impl<D> Freeze for Handle<D>

§

impl<D> RefUnwindSafe for Handle<D>
where D: RefUnwindSafe,

§

impl<D> Send for Handle<D>

§

impl<D> Sync for Handle<D>

§

impl<D> Unpin for Handle<D>

§

impl<D> UnwindSafe for Handle<D>
where D: RefUnwindSafe,

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, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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> 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.