use super::{Diff, EventQueue, PathBuilder};
#[derive(Debug, Clone, Copy, Default)]
pub struct Memo<T> {
value: T,
baseline: T,
}
impl<T: Diff + Clone> Memo<T> {
pub fn new(value: T) -> Self {
Self {
baseline: value.clone(),
value,
}
}
pub fn update_memo<E: EventQueue>(&mut self, event_queue: &mut E) {
self.value
.diff(&self.baseline, PathBuilder::default(), event_queue);
self.baseline = self.value.clone();
}
}
impl<T> core::ops::Deref for Memo<T> {
type Target = T;
fn deref(&self) -> &Self::Target {
&self.value
}
}
impl<T> core::ops::DerefMut for Memo<T> {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.value
}
}