Struct tract_tensorflow::prelude::tract_ndarray::MathCell
source · pub struct MathCell<T>(/* private fields */);Expand description
A transparent wrapper of Cell<T> which is identical in every way, except
it will implement arithmetic operators as well.
The purpose of MathCell is to be used from .cell_view().
The MathCell derefs to Cell, so all the cell’s methods are available.
Implementations§
Methods from Deref<Target = Cell<T>>§
1.17.0 · sourcepub fn swap(&self, other: &Cell<T>)
pub fn swap(&self, other: &Cell<T>)
Swaps the values of two Cells.
Difference with std::mem::swap is that this function doesn’t require &mut reference.
Panics
This function will panic if self and other are different Cells that partially overlap.
(Using just standard library methods, it is impossible to create such partially overlapping Cells.
However, unsafe code is allowed to e.g. create two &Cell<[i32; 2]> that partially overlap.)
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());1.17.0 · sourcepub fn replace(&self, val: T) -> T
pub fn replace(&self, val: T) -> T
Replaces the contained value with val, and returns the old contained value.
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);1.0.0 · sourcepub fn get(&self) -> T
pub fn get(&self) -> T
Returns a copy of the contained value.
Examples
use std::cell::Cell;
let c = Cell::new(5);
let five = c.get();sourcepub fn update<F>(&self, f: F) -> Twhere
F: FnOnce(T) -> T,
🔬This is a nightly-only experimental API. (cell_update)
pub fn update<F>(&self, f: F) -> Twhere
F: FnOnce(T) -> T,
cell_update)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);1.12.0 · sourcepub fn as_ptr(&self) -> *mut T
pub fn as_ptr(&self) -> *mut T
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();1.11.0 · sourcepub fn get_mut(&mut self) -> &mut T
pub fn get_mut(&mut self) -> &mut T
Returns a mutable reference to the underlying data.
This call borrows Cell mutably (at compile-time) which guarantees
that we possess the only reference.
However be cautious: this method expects self to be mutable, which is
generally not the case when using a Cell. If you require interior
mutability by reference, consider using RefCell which provides
run-time checked mutable borrows through its borrow_mut method.
Examples
use std::cell::Cell;
let mut c = Cell::new(5);
*c.get_mut() += 1;
assert_eq!(c.get(), 6);1.17.0 · sourcepub fn take(&self) -> T
pub fn take(&self) -> T
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);1.37.0 · sourcepub fn as_slice_of_cells(&self) -> &[Cell<T>]
pub fn as_slice_of_cells(&self) -> &[Cell<T>]
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);sourcepub fn as_array_of_cells(&self) -> &[Cell<T>; N]
🔬This is a nightly-only experimental API. (as_array_of_cells)
pub fn as_array_of_cells(&self) -> &[Cell<T>; N]
as_array_of_cells)Returns a &[Cell<T>; N] from a &Cell<[T; N]>
Examples
#![feature(as_array_of_cells)]
use std::cell::Cell;
let mut array: [i32; 3] = [1, 2, 3];
let cell_array: &Cell<[i32; 3]> = Cell::from_mut(&mut array);
let array_cell: &[Cell<i32>; 3] = cell_array.as_array_of_cells();Trait Implementations§
source§impl<'a, T> AssignElem<T> for &'a MathCell<T>
impl<'a, T> AssignElem<T> for &'a MathCell<T>
Assignable element, simply self.set(input).
source§fn assign_elem(self, input: T)
fn assign_elem(self, input: T)
input to the element that self represents.source§impl<T> Ord for MathCell<T>
impl<T> Ord for MathCell<T>
source§impl<T> PartialEq for MathCell<T>
impl<T> PartialEq for MathCell<T>
source§impl<T> PartialOrd for MathCell<T>where
T: Copy + PartialOrd,
impl<T> PartialOrd for MathCell<T>where
T: Copy + PartialOrd,
source§fn le(&self, rhs: &MathCell<T>) -> bool
fn le(&self, rhs: &MathCell<T>) -> bool
self and other) and is used by the <=
operator. Read moreimpl<T> Eq for MathCell<T>
Auto Trait Implementations§
impl<T> !RefUnwindSafe for MathCell<T>
impl<T> Send for MathCell<T>where
T: Send,
impl<T> !Sync for MathCell<T>
impl<T> Unpin for MathCell<T>where
T: Unpin,
impl<T> UnwindSafe for MathCell<T>where
T: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.