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