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
|