From ee29a3b1291e9cedd8b54c31fa9f273e39f51970 Mon Sep 17 00:00:00 2001 From: Malte Voos Date: Tue, 7 Oct 2025 20:57:48 +0200 Subject: revamp subtitle selection --- src/util/tracker.rs | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/util/tracker.rs (limited to 'src/util/tracker.rs') diff --git a/src/util/tracker.rs b/src/util/tracker.rs new file mode 100644 index 0000000..66c30a9 --- /dev/null +++ b/src/util/tracker.rs @@ -0,0 +1,41 @@ +pub struct Tracker { + inner: T, + dirty: bool, +} + +/// Tracks changes to an inner value T. Any change using `set` will cause the +/// tracker to be marked as dirty. +impl Tracker { + pub fn new(inner: T) -> Self { + Self { inner, dirty: true } + } + + pub fn get(&self) -> &T { + &self.inner + } + + pub fn get_mut(&mut self) -> &mut T { + self.dirty = true; + &mut self.inner + } + + pub fn set(&mut self, value: T) { + self.dirty = true; + self.inner = value; + } + + pub fn is_dirty(&self) -> bool { + self.dirty + } + + /// Marks the tracker as clean. + pub fn reset(&mut self) { + self.dirty = false; + } +} + +impl Default for Tracker { + fn default() -> Self { + Self::new(T::default()) + } +} -- cgit 1.4.1