summaryrefslogtreecommitdiff
path: root/src/cache.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/cache.rs')
-rw-r--r--src/cache.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/cache.rs b/src/cache.rs
new file mode 100644
index 00000000..4cf97ba6
--- /dev/null
+++ b/src/cache.rs
@@ -0,0 +1,34 @@
+//! Caching for incremental compilation.
+
+use std::collections::HashMap;
+
+use crate::layout::{Frame, Regions};
+
+/// A cache for incremental compilation.
+#[derive(Default, Debug, Clone)]
+pub struct Cache {
+ /// A map that holds the layouted nodes from past compilations.
+ pub frames: HashMap<u64, FramesEntry>,
+}
+
+impl Cache {
+ /// Create a new, empty cache.
+ pub fn new() -> Self {
+ Self::default()
+ }
+
+ /// Clear the cache.
+ pub fn clear(&mut self) {
+ self.frames.clear();
+ }
+}
+
+/// Frames from past compilations and checks for their validity in future
+/// compilations.
+#[derive(Debug, Clone)]
+pub struct FramesEntry {
+ /// The regions in which these frames are valid.
+ pub regions: Regions,
+ /// Cached frames for a node.
+ pub frames: Vec<Frame>,
+}