1.0.0[][src]Struct std::cell::Cell

#[repr(transparent)]
pub struct Cell<T> where
    T: ?Sized
{ /* fields omitted */ }

A mutable memory location.

Examples

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;

// ERROR: `my_struct` is immutable
// my_struct.regular_field = new_value;

// WORKS: although `my_struct` is immutable, `special_field` is a `Cell`,
// which can always be mutated
my_struct.special_field.set(new_value);
assert_eq!(my_struct.special_field.get(), new_value);Run

See the module-level documentation for more.

Methods

impl<T> Cell<T>[src]

pub const fn new(value: T) -> Cell<T>[src]

Creates a new Cell containing the given value.

Examples

use std::cell::Cell;

let c = Cell::new(5);Run

pub fn set(&self, val: T)[src]

Sets the contained value.

Examples

use std::cell::Cell;

let c = Cell::new(5);

c.set(10);Run

pub fn swap(&self, other: &Cell<T>)1.17.0[src]

Swaps the values of two Cells. Difference with std::mem::swap is that this function doesn't require &mut reference.

Examples

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());Run

pub fn replace(&self, val: T) -> T1.17.0[src]

Replaces the contained value, and returns it.

Examples

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);Run

pub fn into_inner(self) -> T1.17.0[src]

Unwraps the value.

Examples

use std::cell::Cell;

let c = Cell::new(5);
let five = c.into_inner();

assert_eq!(five, 5);Run

impl<T> Cell<T> where
    T: Copy
[src]

pub fn get(&self) -> T[src]

Returns a copy of the contained value.

Examples

use std::cell::Cell;

let c = Cell::new(5);

let five = c.get();Run

pub fn update<F>(&self, f: F) -> T where
    F: FnOnce(T) -> T, 
[src]

🔬 This is a nightly-only experimental API. (cell_update #50186)

Updates the contained value using a function and returns the new value.

Examples

#![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);Run

impl<T> Cell<T> where
    T: ?Sized
[src]

pub const fn as_ptr(&self) -> *mut T1.12.0[src]

Returns a raw pointer to the underlying data in this cell.

Examples

use std::cell::Cell;

let c = Cell::new(5);

let ptr = c.as_ptr();Run

Important traits for &'_ mut F
pub fn get_mut(&mut self) -> &mut T1.11.0[src]

Returns a mutable reference to the underlying data.

This call borrows Cell mutably (at compile-time) which guarantees that we possess the only reference.

Examples

use std::cell::Cell;

let mut c = Cell::new(5);
*c.get_mut() += 1;

assert_eq!(c.get(), 6);Run

pub fn from_mut(t: &mut T) -> &Cell<T>1.37.0[src]

Returns a &Cell<T> from a &mut T

Examples

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);Run

impl<T> Cell<T> where
    T: Default
[src]

pub fn take(&self) -> T1.17.0[src]

Takes the value of the cell, leaving Default::default() in its place.

Examples

use std::cell::Cell;

let c = Cell::new(5);
let five = c.take();

assert_eq!(five, 5);
assert_eq!(c.into_inner(), 0);Run

impl<T> Cell<[T]>[src]

Important traits for &'_ [u8]
pub fn as_slice_of_cells(&self) -> &[Cell<T>]1.37.0[src]

Returns a &[Cell<T>] from a &Cell<[T]>

Examples

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);Run

Trait Implementations

impl<T> Clone for Cell<T> where
    T: Copy
[src]

impl<T, U> CoerceUnsized<Cell<U>> for Cell<T> where
    T: CoerceUnsized<U>, 
[src]

impl<T> Debug for Cell<T> where
    T: Copy + Debug
[src]

impl<T> Default for Cell<T> where
    T: Default
[src]

fn default() -> Cell<T>[src]

Creates a Cell<T>, with the Default value for T.

impl<T> Eq for Cell<T> where
    T: Eq + Copy
1.2.0[src]

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

impl<T> Ord for Cell<T> where
    T: Ord + Copy
1.10.0[src]

impl<T> PartialEq<Cell<T>> for Cell<T> where
    T: PartialEq<T> + Copy
[src]

impl<T> PartialOrd<Cell<T>> for Cell<T> where
    T: PartialOrd<T> + Copy
1.10.0[src]

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

impl<T> !Sync for Cell<T> where
    T: ?Sized
[src]

Auto Trait Implementations

impl<T> !RefUnwindSafe for Cell<T>

impl<T: ?Sized> Unpin for Cell<T> where
    T: Unpin

impl<T: ?Sized> UnwindSafe for Cell<T> where
    T: UnwindSafe

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<!> for T[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.

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy