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 a seg = RenderCache { unRenderCache :: Seq (Maybe (CachedRender a seg)) } deriving (Eq, Show) -- | Create an empty cache matching the buffer size emptyRenderCacheFor :: Buffer a seg -> RenderCache a seg emptyRenderCacheFor (Buffer xs) = RenderCache (Seq.replicate (Seq.length xs) Nothing) -- | Resize cache to match buffer length resizeCache :: Buffer a seg -> RenderCache a seg -> RenderCache a seg 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 a seg -> Int length (RenderCache xs) = Seq.length xs