pub struct HedelCell<T: Debug> { /* private fields */ }
Expand description
A safe custom RefCell-like
cell, based on UnsafeCell
, and relying on a BorrowFlag
for runtime borrow checking.
Implementations§
Source§impl<T: Debug> HedelCell<T>
impl<T: Debug> HedelCell<T>
Sourcepub fn new(value: T) -> Self
pub fn new(value: T) -> Self
The default constructor for HedelCell
.
§Example
use hedel_rs::cell::HedelCell;
fn main() {
let cell = HedelCell::<i32>::new(67);
println!("{:?}", cell.get());
}
Sourcepub fn try_get(&self) -> Result<RefHedel<'_, T>, HedelError>
pub fn try_get(&self) -> Result<RefHedel<'_, T>, HedelError>
Get a RefHedel
pointing to the inner value in a HedelCell
.
SAFETY: checks if a mutable borrow is active and panics. Also increments a shared reference counter.
§Example
use hedel_rs::cell::HedelCell;
fn main() {
let cell = HedelCell::<i32>::new(56);
let borrow = cell.get();
let borrow_2 = cell.get();
println!("{:?}", borrow); // prints 56
}
Sourcepub fn try_get_mut<'a>(&'a self) -> Result<RefMutHedel<'a, T>, HedelError>
pub fn try_get_mut<'a>(&'a self) -> Result<RefMutHedel<'a, T>, HedelError>
Get a RefMutHedel
mutably pointing to the inner value in a HedelCell
.
SAFETY: panics when a mutable reference is alive or when there’s one or more shared references.
Also sets the flag to BorrowFlag::Exclusive
.
§Example
use hedel_rs::cell::HedelCell;
fn main() {
let cell = HedelCell::<i32>::new(23);
*cell.get_mut() = 36;
let mut borrow = cell.get_mut();
*borrow = 15;
// this would panic
// println!("{:?}", cell.get());
}
Sourcepub fn get_mut(&self) -> RefMutHedel<'_, T>
pub fn get_mut(&self) -> RefMutHedel<'_, T>
Guarantees to return RefMutHedel
or panics!
Sourcepub fn into_inner(self) -> T
pub fn into_inner(self) -> T
Consumes itself and returns the inner value
Trait Implementations§
Auto Trait Implementations§
impl<T> !Freeze for HedelCell<T>
impl<T> !RefUnwindSafe for HedelCell<T>
impl<T> Send for HedelCell<T>where
T: Send,
impl<T> !Sync for HedelCell<T>
impl<T> Unpin for HedelCell<T>where
T: Unpin,
impl<T> UnwindSafe for HedelCell<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
Mutably borrows from an owned value. Read more