chore: more signals methods

This commit is contained in:
Jonathan Kelley committed 2023-01-01 22:02:49 -05:00
1 parent 4f9d67fb45
commit c0315e55f4
3 files changed
+48 -23

No files matched your search

+18
View File
@@ -59,12 +59,30 @@ impl SignalRt {
}
}
pub fn remove(&self, id: usize) {
self.signals.borrow_mut().remove(id);
}
pub fn with<T: 'static, O>(&self, id: usize, f: impl FnOnce(&T) -> O) -> O {
let signals = self.signals.borrow();
let inner = &signals[id];
let inner = inner.value.downcast_ref::<T>().unwrap();
f(&*inner)
}
pub(crate) fn read<T: 'static>(&self, id: usize) -> std::cell::Ref<T> {
let signals = self.signals.borrow();
std::cell::Ref::map(signals, |signals| {
signals[id].value.downcast_ref::<T>().unwrap()
})
}
pub(crate) fn write<T: 'static>(&self, id: usize) -> std::cell::RefMut<T> {
let mut signals = self.signals.borrow_mut();
std::cell::RefMut::map(signals, |signals| {
signals[id].value.downcast_mut::<T>().unwrap()
})
}
}
struct Inner {