Handle

Struct Handle 

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

A handle to a heap object.

Handle may be cheaply copied as is necessary to serve your needs. It’s even legal for it to outlive the object it refers to, provided it is no longer used to access it afterwards.

Implementations§

Source§

impl<T> Handle<T>

Source

pub unsafe fn get_unchecked(&self) -> &T

Get a reference to the object this handle refers to without checking any invariants.

You almost certainly do not want to use this function: consider Heap::get or Heap::get_unchecked instead; both are safer than this function.

The following invariants must be upheld by you, the responsible programmer:

  • The object must still be alive (i.e: accessible from the heap it was created on)
  • The object must not be mutably accessible elsewhere (i.e: has any live references to it) by any other part of the program. Immutable references are permitted. Other handles (i.e: Handle or Rooted are also permitted, provided they are not in use.
  • That a garbage collection of the heap this object belongs to does not occur while the reference this function creates is live.

If any of these invariants are not upheld, undefined behaviour will result when using this function. If all are upheld, this function provides zero-cost access to underlying object.

Source

pub unsafe fn get_mut_unchecked(&self) -> &mut T

Get a mutable reference to the object this handle refers to without checking any invariants.

You almost certainly do not want to use this function: consider [Heap::mutate] or [Heap::mutate_unchecked] instead; both are safer than this function.

The following invariants must be upheld by you, the responsible programmer:

  • The object must still be alive (i.e: accessible from the heap it was created on)
  • The object must not be accessible elsewhere (i.e: has any live references to it), either mutably or immutably, by any other part of the program. Other handles (i.e: Handle or Rooted are permitted, provided they are not in use.
  • That a garbage collection of the heap this object belongs to does not occur while the reference this function creates is live.

If any of these invariants are not upheld, undefined behaviour will result when using this function. If all are upheld, this function provides zero-cost access to underlying object.

Trait Implementations§

Source§

impl<T> AsRef<Handle<T>> for Handle<T>

Source§

fn as_ref(&self) -> &Handle<T>

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<T> AsRef<Handle<T>> for Rooted<T>

Source§

fn as_ref(&self) -> &Handle<T>

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<T> Clone for Handle<T>

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> Debug for Handle<T>

Source§

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

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

impl<T> From<Rooted<T>> for Handle<T>

Source§

fn from(rooted: Rooted<T>) -> Self

Converts to this type from the input type.
Source§

impl<T> Hash for Handle<T>

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<T> PartialEq for Handle<T>

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<O: Trace<O>> Trace<O> for Handle<O>

Source§

fn trace(&self, tracer: &mut Tracer<'_, O>)

Trace all child objects of this type. Read more
Source§

impl<T> Copy for Handle<T>

Source§

impl<T> Eq for Handle<T>

Auto Trait Implementations§

§

impl<T> Freeze for Handle<T>

§

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

§

impl<T> !Send for Handle<T>

§

impl<T> !Sync for Handle<T>

§

impl<T> Unpin for Handle<T>

§

impl<T> UnwindSafe for Handle<T>
where T: 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, 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<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.