From 724e6e4d97f608282e891742565b1036f3e970d5 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sun, 26 Jan 2025 22:22:53 +0100 Subject: graphics config --- client/src/render/scene/demand_map.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'client/src/render/scene/demand_map.rs') diff --git a/client/src/render/scene/demand_map.rs b/client/src/render/scene/demand_map.rs index 16fa181..c27eaac 100644 --- a/client/src/render/scene/demand_map.rs +++ b/client/src/render/scene/demand_map.rs @@ -25,7 +25,7 @@ pub struct DemandMap { inner: RwLock>, } struct DemandMapState { - values: HashMap, + values: HashMap, needed: HashSet, size_metric: usize, } @@ -46,18 +46,30 @@ impl DemandMap { pub fn insert(&self, key: K, value: V, size: usize) { let mut s = self.inner.write().unwrap(); s.needed.remove(&key); - s.values.insert(key, value); + if let Some((_, old_size)) = s.values.insert(key, (value, size)) { + s.size_metric -= old_size; + } s.size_metric += size; } pub fn try_get(&self, key: K) -> Option { let mut s = self.inner.write().unwrap(); - if let Some(k) = s.values.get(&key) { + if let Some((k, _)) = s.values.get(&key) { Some(k.to_owned()) } else { s.needed.insert(key); None } } + pub fn regenerate_all(&self) { + let mut s = self.inner.write().unwrap(); + let keys = s.values.keys().cloned().collect::>(); + s.needed.extend(keys); + } + pub fn clear(&self) { + let mut s = self.inner.write().unwrap(); + s.values.clear(); + s.size_metric = 0; + } } impl Widget for &DemandMap { -- cgit v1.2.3-70-g09d2