Struct gc::GcCell[][src]

pub struct GcCell<T: ?Sized + 'static> { /* fields omitted */ }

A mutable memory location with dynamically checked borrow rules that can be used inside of a garbage-collected pointer.

This object is a RefCell that can be used inside of a Gc<T>.

Implementations

impl<T: Trace> GcCell<T>[src]

pub fn new(value: T) -> Self[src]

Creates a new GcCell containing value.

pub fn into_inner(self) -> T[src]

Consumes the GcCell, returning the wrapped value.

impl<T: Trace + ?Sized> GcCell<T>[src]

pub fn borrow(&self) -> GcCellRef<'_, T>[src]

Immutably borrows the wrapped value.

The borrow lasts until the returned GcCellRef exits scope. Multiple immutable borrows can be taken out at the same time.

Panics

Panics if the value is currently mutably borrowed.

pub fn borrow_mut(&self) -> GcCellRefMut<'_, T>[src]

Mutably borrows the wrapped value.

The borrow lasts until the returned GcCellRefMut exits scope. The value cannot be borrowed while this borrow is active.

Panics

Panics if the value is currently borrowed.

pub fn try_borrow(&self) -> Result<GcCellRef<'_, T>, BorrowError>[src]

Immutably borrows the wrapped value, returning an error if the value is currently mutably borrowed.

The borrow lasts until the returned GcCellRef exits scope. Multiple immutable borrows can be taken out at the same time.

This is the non-panicking variant of borrow.

Examples

use gc::GcCell;

let c = GcCell::new(5);

{
    let m = c.borrow_mut();
    assert!(c.try_borrow().is_err());
}

{
    let m = c.borrow();
    assert!(c.try_borrow().is_ok());
}

pub fn try_borrow_mut(&self) -> Result<GcCellRefMut<'_, T>, BorrowMutError>[src]

Mutably borrows the wrapped value, returning an error if the value is currently borrowed.

The borrow lasts until the returned GcCellRefMut exits scope. The value cannot be borrowed while this borrow is active.

This is the non-panicking variant of borrow_mut.

Examples

use gc::GcCell;

let c = GcCell::new(5);

{
    let m = c.borrow();
    assert!(c.try_borrow_mut().is_err());
}

assert!(c.try_borrow_mut().is_ok());

Trait Implementations

impl<T: Trace + Clone> Clone for GcCell<T>[src]

impl<T: Trace + ?Sized + Debug> Debug for GcCell<T>[src]

impl<T: Trace + Default> Default for GcCell<T>[src]

impl<T: Trace + ?Sized + Eq> Eq for GcCell<T>[src]

impl<T: Trace + ?Sized> Finalize for GcCell<T>[src]

impl<T: Trace + ?Sized + Ord> Ord for GcCell<T>[src]

impl<T: Trace + ?Sized + PartialEq> PartialEq<GcCell<T>> for GcCell<T>[src]

impl<T: Trace + ?Sized + PartialOrd> PartialOrd<GcCell<T>> for GcCell<T>[src]

impl<T: ?Sized + Send> Send for GcCell<T>[src]

impl<T: Trace + ?Sized> Trace for GcCell<T>[src]

Auto Trait Implementations

impl<T> !RefUnwindSafe for GcCell<T>[src]

impl<T> !Sync for GcCell<T>[src]

impl<T: ?Sized> Unpin for GcCell<T> where
    T: Unpin
[src]

impl<T: ?Sized> UnwindSafe for GcCell<T> where
    T: UnwindSafe
[src]

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.