Copyright | (c) 2015 Athan Clark |
---|---|
License | BSD-3 |
Maintainer | athan.clark@gmail.com |
Stability | experimental |
Portability | GHC |
Safe Haskell | None |
Language | Haskell2010 |
A time-indexed mutable map for hashable keys.
The goal of this map is to provide moderately fast lookups and insertions for
key/value pairs, while implicitly keeping track of the last modification time of
each entity. The auxilliary time data is used for filterSince
and filterFromNow
,
which quickly prune the data set to get rid of old entities.
- data TimeMap k a
- newTimeMap :: STM (TimeMap k a)
- insert :: Hashable k => Eq k => k -> a -> TimeMap k a -> IO ()
- insertWithTime :: forall k a. Hashable k => Eq k => UTCTime -> k -> a -> TimeMap k a -> STM ()
- update :: Hashable k => Eq k => (a -> Maybe a) -> k -> TimeMap k a -> IO ()
- updateWithTime :: forall k a. Hashable k => Eq k => UTCTime -> (a -> Maybe a) -> k -> TimeMap k a -> STM ()
- adjust :: Hashable k => Eq k => (a -> a) -> k -> TimeMap k a -> IO ()
- adjustWithTime :: forall k a. Hashable k => Eq k => UTCTime -> (a -> a) -> k -> TimeMap k a -> STM ()
- delete :: Hashable k => Eq k => k -> TimeMap k a -> STM ()
- touch :: Hashable k => Eq k => k -> TimeMap k a -> IO ()
- lookup :: Hashable k => Eq k => k -> TimeMap k a -> STM (Maybe a)
- timeOf :: Hashable k => Eq k => k -> TimeMap k a -> STM (Maybe UTCTime)
- ageOf :: Hashable k => Eq k => k -> TimeMap k a -> IO (Maybe NominalDiffTime)
- keys :: Hashable k => Eq k => TimeMap k a -> STM (HashSet k)
- elems :: TimeMap k a -> STM [a]
- toList :: Hashable k => Eq k => TimeMap k a -> STM [(k, a)]
- size :: TimeMap k a -> STM Int
- null :: TimeMap k a -> STM Bool
- filter :: Hashable k => Eq k => (a -> Bool) -> TimeMap k a -> STM ()
- filterWithKey :: forall k a. Hashable k => Eq k => (k -> a -> Bool) -> TimeMap k a -> STM ()
- filterSince :: Hashable k => Eq k => UTCTime -> TimeMap k a -> STM ()
- filterFromNow :: Hashable k => Eq k => NominalDiffTime -> TimeMap k a -> IO ()
- takeSince :: Hashable k => Eq k => UTCTime -> TimeMap k a -> STM [(k, a)]
- takeFromNow :: Hashable k => Eq k => NominalDiffTime -> TimeMap k a -> IO [(k, a)]
Types
Construction
newTimeMap :: STM (TimeMap k a) Source #
Create a fresh, empty map.
insert :: Hashable k => Eq k => k -> a -> TimeMap k a -> IO () Source #
Inserts a key and value into a TimeMap
- it adds the value
or overwites an existing entity.
insertWithTime :: forall k a. Hashable k => Eq k => UTCTime -> k -> a -> TimeMap k a -> STM () Source #
update :: Hashable k => Eq k => (a -> Maybe a) -> k -> TimeMap k a -> IO () Source #
Updates or deletes the value at k
, while updating its time.
updateWithTime :: forall k a. Hashable k => Eq k => UTCTime -> (a -> Maybe a) -> k -> TimeMap k a -> STM () Source #
adjust :: Hashable k => Eq k => (a -> a) -> k -> TimeMap k a -> IO () Source #
Adjusts the value at k
, while updating its time.
adjustWithTime :: forall k a. Hashable k => Eq k => UTCTime -> (a -> a) -> k -> TimeMap k a -> STM () Source #
touch :: Hashable k => Eq k => k -> TimeMap k a -> IO () Source #
Resets the key to the current time, and fails silently when the key isn't present.
Query
lookup :: Hashable k => Eq k => k -> TimeMap k a -> STM (Maybe a) Source #
Performs a non-mutating lookup for some key.
Filter
filterWithKey :: forall k a. Hashable k => Eq k => (k -> a -> Bool) -> TimeMap k a -> STM () Source #
filterSince :: Hashable k => Eq k => UTCTime -> TimeMap k a -> STM () Source #
Filters out all entries older than or equal to a designated time
:: Hashable k | |
=> Eq k | |
=> NominalDiffTime | Assumes a positive distance into the past |
-> TimeMap k a | |
-> IO () |
Filters out all entries within some time frame
filterFromNow 1 -- removes entities older than or equal to one second from now
Take
takeFromNow :: Hashable k => Eq k => NominalDiffTime -> TimeMap k a -> IO [(k, a)] Source #