module Data.TStorage( TMap,
newTMapIO,
add,
tryComplete,
complete,
remove,
removeByKey,
apply,
purgeTMapIO,
HasKey(key),
)
where
import Control.Concurrent.AdvSTM
import Control.Exception
import Prelude hiding (lookup,catch)
import qualified Data.TMap.Backend as B
import qualified Data.CacheStructure as C
import qualified Data.Edison.Assoc as M
import Data.TMap
import Data.HasKey(HasKey(key))
add :: (M.FiniteMapX map k, MonadAdvSTM stm, Ord k, B.Backend k a b, C.CacheStructure c k
, HasKey a k)
=> a -> TMap map k a b c -> stm ()
add a = insert (key a) a
tryComplete :: (M.FiniteMapX map k, MonadAdvSTM stm, Ord k,B.Backend k a b, C.CacheStructure c k
, HasKey a k)
=> a -> TMap map k a b c -> stm (Maybe a)
tryComplete a = lookup (key a)
complete :: (M.FiniteMapX map k, MonadAdvSTM stm, Ord k, B.Backend k a b, C.CacheStructure c k
, HasKey a k)
=> a -> TMap map k a b c -> stm a
complete a tmap = do
mval <- tryComplete a tmap
case mval of
Just val -> return val
Nothing -> throw EntryNotFound
remove :: (M.FiniteMapX map k, MonadAdvSTM stm, Ord k, B.Backend k a b, C.CacheStructure c k
, HasKey a k)
=> a -> TMap map k a b c -> stm ()
remove a = delete (key a)
removeByKey :: (M.FiniteMapX map k, MonadAdvSTM stm, Ord k, B.Backend k a b, C.CacheStructure c k
, HasKey a k)
=> k -> TMap map k a b c -> stm ()
removeByKey = delete
apply :: (M.FiniteMapX map k, MonadAdvSTM stm, Ord k, B.Backend k a b, C.CacheStructure c k
, HasKey a k)
=> (a -> a) -> a -> TMap map k a b c -> stm a
apply f a tmap = do
adjust f (key a) tmap
complete a tmap