2021-10-31 18:00:14 +00:00
|
|
|
|
|
|
|
use std::rc::Rc;
|
2021-11-18 16:46:41 +00:00
|
|
|
use std::cell::{Cell, RefCell, RefMut};
|
2021-10-31 18:00:14 +00:00
|
|
|
|
|
|
|
#[derive(Clone, Debug)]
|
|
|
|
pub struct Signal<T: Copy>(Rc<Cell<T>>);
|
|
|
|
|
|
|
|
impl<T: Copy> Signal<T> {
|
|
|
|
pub fn new(init: T) -> Signal<T> {
|
|
|
|
Signal(Rc::new(Cell::new(init)))
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn set(&mut self, value: T) {
|
|
|
|
self.0.set(value);
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn get(&mut self) -> T {
|
|
|
|
self.0.get()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Clone, Debug)]
|
2021-11-18 16:46:41 +00:00
|
|
|
pub struct Latch<T>(Rc<RefCell<T>>);
|
2021-10-31 18:00:14 +00:00
|
|
|
|
2021-11-18 16:46:41 +00:00
|
|
|
impl<T> Latch<T> {
|
|
|
|
pub fn new(init: T) -> Latch<T> {
|
|
|
|
Latch(Rc::new(RefCell::new(init)))
|
2021-10-31 18:00:14 +00:00
|
|
|
}
|
|
|
|
|
2021-11-18 16:46:41 +00:00
|
|
|
pub fn borrow_mut(&self) -> RefMut<'_, T> {
|
|
|
|
self.0.borrow_mut()
|
2021-10-31 18:00:14 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|