#[repr(transparent)]
pub struct Cell<T> where
T: ?Sized, { /* fields omitted */ }
A mutable memory location.
In this example, you can see that Cell<T> enables mutation inside an
immutable struct. In other words, it enables "interior mutability".
use std::cell::Cell;
struct SomeStruct {
regular_field: u8,
special_field: Cell<u8>,
}
let my_struct = SomeStruct {
regular_field: 0,
special_field: Cell::new(1),
};
let new_value = 100;
my_struct.special_field.set(new_value);
assert_eq!(my_struct.special_field.get(), new_value);
See the module-level documentation for more.
Returns a copy of the contained value.
use std::cell::Cell;
let c = Cell::new(5);
let five = c.get();
🔬 This is a nightly-only experimental API. (cell_update)
Updates the contained value using a function and returns the new value.
#![feature(cell_update)]
use std::cell::Cell;
let c = Cell::new(5);
let new = c.update(|x| x + 1);
assert_eq!(new, 6);
assert_eq!(c.get(), 6);
Creates a new Cell containing the given value.
use std::cell::Cell;
let c = Cell::new(5);
Sets the contained value.
use std::cell::Cell;
let c = Cell::new(5);
c.set(10);
Swaps the values of two Cells.
Difference with std::mem::swap is that this function doesn't require &mut reference.
use std::cell::Cell;
let c1 = Cell::new(5i32);
let c2 = Cell::new(10i32);
c1.swap(&c2);
assert_eq!(10, c1.get());
assert_eq!(5, c2.get());
Replaces the contained value, and returns it.
use std::cell::Cell;
let cell = Cell::new(5);
assert_eq!(cell.get(), 5);
assert_eq!(cell.replace(10), 5);
assert_eq!(cell.get(), 10);
Unwraps the value.
use std::cell::Cell;
let c = Cell::new(5);
let five = c.into_inner();
assert_eq!(five, 5);
Returns a raw pointer to the underlying data in this cell.
use std::cell::Cell;
let c = Cell::new(5);
let ptr = c.as_ptr();
Returns a mutable reference to the underlying data.
This call borrows Cell mutably (at compile-time) which guarantees
that we possess the only reference.
use std::cell::Cell;
let mut c = Cell::new(5);
*c.get_mut() += 1;
assert_eq!(c.get(), 6);
🔬 This is a nightly-only experimental API. (as_cell)
Returns a &Cell<T> from a &mut T
#![feature(as_cell)]
use std::cell::Cell;
let slice: &mut [i32] = &mut [1, 2, 3];
let cell_slice: &Cell<[i32]> = Cell::from_mut(slice);
let slice_cell: &[Cell<i32>] = cell_slice.as_slice_of_cells();
assert_eq!(slice_cell.len(), 3);
Takes the value of the cell, leaving Default::default() in its place.
use std::cell::Cell;
let c = Cell::new(5);
let five = c.take();
assert_eq!(five, 5);
assert_eq!(c.into_inner(), 0);
🔬 This is a nightly-only experimental API. (as_cell)
Returns a &[Cell<T>] from a &Cell<[T]>
#![feature(as_cell)]
use std::cell::Cell;
let slice: &mut [i32] = &mut [1, 2, 3];
let cell_slice: &Cell<[i32]> = Cell::from_mut(slice);
let slice_cell: &[Cell<i32>] = cell_slice.as_slice_of_cells();
assert_eq!(slice_cell.len(), 3);
Performs copy-assignment from source. Read more
This method returns an ordering between self and other values if one exists. Read more
This method tests less than (for self and other) and is used by the < operator. Read more
This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
This method tests greater than (for self and other) and is used by the > operator. Read more
This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
This method returns an Ordering between self and other. Read more
fn max(self, other: Self) -> Self | 1.21.0 [src] |
Compares and returns the maximum of two values. Read more
fn min(self, other: Self) -> Self | 1.21.0 [src] |
Compares and returns the minimum of two values. Read more
This method tests for self and other values to be equal, and is used by ==. Read more
This method tests for !=.
Formats the value using the given formatter. Read more
Creates a Cell<T>, with the Default value for T.
type Owned = T
Creates owned data from borrowed data, usually by cloning. Read more
🔬 This is a nightly-only experimental API. (toowned_clone_into)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more
type Error = !
🔬 This is a nightly-only experimental API. (try_from)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from)
Immutably borrows from an owned value. Read more
🔬 This is a nightly-only experimental API. (get_type_id)
this method will likely be replaced by an associated static
type Error = <U as TryFrom<T>>::Error
🔬 This is a nightly-only experimental API. (try_from)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from)
Mutably borrows from an owned value. Read more