moa/src/signals.rs

35 lines
627 B
Rust
Raw Normal View History

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
}
}