summaryrefslogtreecommitdiffstats
path: root/src/TextViewport/Render/RenderCache.hs
blob: 1db32fecc739c884e5da9551de6891b302e6e912 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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