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