Struct kernel::common::take_cell::TakeCell [] [src]

pub struct TakeCell<'a, T: 'a + ?Sized> {
    val: UnsafeCell<Option<&'a mut T>>,
}

A shared reference to a mutable reference.

A TakeCell wraps potential reference to mutable memory that may be available at a given point. Rather than enforcing borrow rules at compile-time, TakeCell enables multiple clients to hold references to it, but ensures that only one referrer has access to the underlying mutable reference at a time. Clients either move the memory out of the TakeCell or operate on a borrow within a closure. Attempts to take the value from inside a TakeCell may fail by returning None.

Fields

Methods

impl<'a, T: ?Sized> TakeCell<'a, T>
[src]

[src]

[src]

Creates a new TakeCell containing value

[src]

[src]

[src]

Takes the mutable reference out of the TakeCell leaving a None in it's place. If the value has already been taken elsewhere (and not replaceed), the returned Option will be empty.

Examples

let cell = TakeCell::new(1234);
let x = &cell;
let y = &cell;

x.take();
assert_eq!(y.take(), None);

[src]

Stores val in the TakeCell

[src]

Replaces the contents of the TakeCell with val. If the cell was not empty, the previous value is returned, otherwise None is returned.

[src]

Allows closure to borrow the contents of the TakeCell if-and-only-if it is not taken already. The state of the TakeCell is unchanged after the closure completes.

Examples

let cell = TakeCell::new(1234);
let x = &cell;
let y = &cell;

x.map(|value| {
    // We have mutable access to the value while in the closure
    value += 1;
});

// After the closure completes, the mutable memory is still in the cell,
// but potentially changed.
assert_eq!(y.take(), Some(1235));

[src]

Performs a map or returns a default value if the TakeCell is empty

[src]

Performs a map or generates a value with the default closure if the TakeCell is empty

[src]

Behaves the same as map, except the closure is allowed to return an Option.

[src]

Uses the first closure (modify) to modify the value in the TakeCell if it is present, otherwise, fills the TakeCell with the result of mkval.