summaryrefslogtreecommitdiffstats
path: root/src/TextViewport/Render/RenderCache.hs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-03-06 20:45:39 +0100
committertv <tv@krebsco.de>2026-03-06 23:36:06 +0100
commitb098daf7bcb6e4a493723026f5644bd81164c641 (patch)
tree71108cdebf54729830c72b61d725c6f91a3cfdcd /src/TextViewport/Render/RenderCache.hs
parent7e516fc31601fd07923d7033ba64f530175cac0e (diff)
modularize
Diffstat (limited to 'src/TextViewport/Render/RenderCache.hs')
-rw-r--r--src/TextViewport/Render/RenderCache.hs28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/TextViewport/Render/RenderCache.hs b/src/TextViewport/Render/RenderCache.hs
new file mode 100644
index 0000000..1db32fe
--- /dev/null
+++ b/src/TextViewport/Render/RenderCache.hs
@@ -0,0 +1,28 @@
+module TextViewport.Render.RenderCache where
+
+import Data.Sequence (Seq)
+import Data.Sequence qualified as Seq
+import TextViewport.Buffer.Buffer (Buffer(Buffer))
+import TextViewport.Render.CachedRender (CachedRender)
+
+
+newtype RenderCache = RenderCache { unRenderCache :: Seq (Maybe CachedRender) }
+ deriving (Eq, Show)
+
+-- | Create an empty cache matching the buffer size
+emptyRenderCacheFor :: Buffer -> RenderCache
+emptyRenderCacheFor (Buffer xs) =
+ RenderCache (Seq.replicate (Seq.length xs) Nothing)
+
+-- | Resize cache to match buffer length
+resizeCache :: Buffer -> RenderCache -> RenderCache
+resizeCache (Buffer xs) (RenderCache cache) =
+ let n = Seq.length xs
+ m = Seq.length cache
+ in RenderCache $
+ if m < n then cache <> Seq.replicate (n - m) Nothing
+ else Seq.take n cache
+
+-- | Number of cached items
+length :: RenderCache -> Int
+length (RenderCache xs) = Seq.length xs