summaryrefslogtreecommitdiffstats
path: root/graphics/src/cache.rs
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/src/cache.rs')
-rw-r--r--graphics/src/cache.rs19
1 files changed, 10 insertions, 9 deletions
diff --git a/graphics/src/cache.rs b/graphics/src/cache.rs
index bbba79eb..7db80a01 100644
--- a/graphics/src/cache.rs
+++ b/graphics/src/cache.rs
@@ -1,6 +1,7 @@
//! Cache computations and efficiently reuse them.
use std::cell::RefCell;
use std::fmt;
+use std::mem;
use std::sync::atomic::{self, AtomicU64};
/// A simple cache that stores generated values to avoid recomputation.
@@ -58,18 +59,18 @@ impl<T> Cache<T> {
}
/// Clears the [`Cache`].
- pub fn clear(&self)
- where
- T: Clone,
- {
- use std::ops::Deref;
+ pub fn clear(&self) {
+ let mut state = self.state.borrow_mut();
+
+ let previous =
+ mem::replace(&mut *state, State::Empty { previous: None });
- let previous = match self.state.borrow().deref() {
- State::Empty { previous } => previous.clone(),
- State::Filled { current } => Some(current.clone()),
+ let previous = match previous {
+ State::Empty { previous } => previous,
+ State::Filled { current } => Some(current),
};
- *self.state.borrow_mut() = State::Empty { previous };
+ *state = State::Empty { previous };
}
}