diff options
Diffstat (limited to 'src/util/tracker.rs')
| -rw-r--r-- | src/util/tracker.rs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/util/tracker.rs b/src/util/tracker.rs index 69a1c5f..060acae 100644 --- a/src/util/tracker.rs +++ b/src/util/tracker.rs @@ -1,3 +1,5 @@ +use std::ops::Deref; + pub struct Tracker<T> { inner: T, dirty: bool, @@ -40,8 +42,24 @@ impl<T> Tracker<T> { } } +impl<T> Deref for Tracker<T> { + type Target = T; + + fn deref(&self) -> &Self::Target { + self.get() + } +} + impl<T: Default> Default for Tracker<T> { fn default() -> Self { Self::new(T::default()) } } + +impl<T: Eq> Tracker<T> { + pub fn set_if_ne(&mut self, value: T) { + if self.inner != value { + self.set(value); + } + } +} |