{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveTraversable #-}
module Data.LruCache.Internal
( LruCache(..)
, Priority
) where
import Control.DeepSeq (NFData,rnf)
import Data.Int
import qualified Data.HashPSQ as HashPSQ
import Data.Foldable (Foldable)
import Data.Traversable (Traversable)
type Priority = Int64
data LruCache k v = LruCache
{ lruCapacity :: !Int
, lruSize :: !Int
, lruTick :: !Priority
, lruQueue :: !(HashPSQ.HashPSQ k Priority v)
}
deriving (Eq,Show,Functor,Foldable,Traversable)
instance (NFData k, NFData v) => NFData (LruCache k v) where
rnf (LruCache cap size tick queue) =
rnf cap `seq` rnf size `seq` rnf tick `seq` rnf queue