persistent-map-0.0.0: A thread-safe interface for finite map types with optional persistency support.Source codeContentsIndex
Data.TMap
Portabilitynon-portable (requires STM)
Stabilityexperimental
MaintainerPeter Robinson <thaldyron@gmail.com>
Contents
TMap
Creating a new TMap
Finite Map Interace
Handling the size of the TMap
Flushing the backend
Exception Type
Description
Provides a thread-safe STM interface for finite map types with optional persistent storage.
Synopsis
data TMap map k a b c
newTMapIO :: (FiniteMapX map k, Ord k, Backend k a b, CacheStructure c k) => b k a -> Maybe Int -> IO (TMap map k a b c)
lookup :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => k -> TMap map k a b c -> m (Maybe a)
insert :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => k -> a -> TMap map k a b c -> m ()
delete :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => k -> TMap map k a b c -> m ()
member :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => k -> TMap map k a b c -> m Bool
adjust :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => (a -> a) -> k -> TMap map k a b c -> m ()
purgeTMap :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => TMap map k a b c -> m ()
purgeTMapIO :: (FiniteMapX map k, MonadIO m, Ord k, Backend k a b, CacheStructure c k) => TMap map k a b c -> m ()
getMaximumSize :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => TMap map k a b c -> m (Maybe Int)
setMaximumSize :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => TMap map k a b c -> Int -> m ()
getCurrentSize :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => TMap map k a b c -> m Int
flushBackend :: (FiniteMapX map k, MonadIO m, Ord k, Backend k a b, CacheStructure c k) => TMap map k a b c -> m ()
data TMapException
= DuplicateEntry
| EntryNotFound
| TMapNotFound
| TMapDefaultExc String
| BackendException String
TMap
data TMap map k a b c Source
Creating a new TMap
newTMapIOSource
:: (FiniteMapX map k, Ord k, Backend k a b, CacheStructure c k)
=> b k athe backend
-> Maybe Intmaximum-size: Use Nothing for unbounded size.
-> IO (TMap map k a b c)

Creates a new TMap. You will need to use an apropriate backend and specify the caching policy, e.g.,

   import Data.TMap.Backend.StdoutBackend( newStdoutBackend )
   import Data.TMap.CacheStructure.LRU

will simply log all backend operations to Stdout and use a "least recently used" cache algorithm.

Now, to create an unbounded map that uses the 'FM Int String' (see package EdisonCore) as the map type, you can write

   tmap = newTMapIO newStdoutBackend Nothing :: IO (TMap (FM Int) Int String StdoutBackend LRU)
Finite Map Interace
lookup :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => k -> TMap map k a b c -> m (Maybe a)Source
Looks for a given key in the map and (if necessary) in the persistent storage and updates the map if necessary.
insert :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => k -> a -> TMap map k a b c -> m ()Source
Adds a key-value mapping to the map. Can throw a DuplicateEntry exception.
delete :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => k -> TMap map k a b c -> m ()Source
Removes a key from the map. Can throw an EntryNotFound exception.
member :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => k -> TMap map k a b c -> m BoolSource
Checks whether the given key is in the map.
adjust :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => (a -> a) -> k -> TMap map k a b c -> m ()Source
Applies a function to the element identified by the key. Can throw an EntryNotFound exception.
Handling the size of the TMap
purgeTMap :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => TMap map k a b c -> m ()Source
Reduces the map to the appropriate size if the maximum size was exceeded. Calls Data.TMap.Backend.flush if the map is purged. Runs in O(1) if the map size is within bounds, otherwise O(n). Warning: This function should always be called at the end of a transaction to prevent nonterminating retry-loops!
purgeTMapIO :: (FiniteMapX map k, MonadIO m, Ord k, Backend k a b, CacheStructure c k) => TMap map k a b c -> m ()Source
Reduces the map to the appropriate size if the maximum size was exceeded. Calls Data.TMap.Backend.flush if the map is purged. Runs in O(1) if the map size is within bounds, otherwise O(n).
getMaximumSize :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => TMap map k a b c -> m (Maybe Int)Source
Gets the maximum size of the map. O(1).
setMaximumSize :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => TMap map k a b c -> Int -> m ()Source
Sets the maximum size of the map. O(1). Note that the size of the TMap needs to be reduced manually to the maximum size by calling purgeTMap.
getCurrentSize :: (FiniteMapX map k, MonadAdvSTM m, Ord k, Backend k a b, CacheStructure c k) => TMap map k a b c -> m IntSource
Gets the current size of the map. O(1).
Flushing the backend
flushBackend :: (FiniteMapX map k, MonadIO m, Ord k, Backend k a b, CacheStructure c k) => TMap map k a b c -> m ()Source
Sends a B.flush request to the backend. Useful for asynchronous backend implementations.
Exception Type
data TMapException Source
Constructors
DuplicateEntry
EntryNotFound
TMapNotFound
TMapDefaultExc String
BackendException String
show/hide Instances
Produced by Haddock version 2.4.2