diff options
Diffstat (limited to 'src/TextViewport/Render/RenderCache.hs')
| -rw-r--r-- | src/TextViewport/Render/RenderCache.hs | 28 |
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 |
