| Copyright | (c) 2015 Athan Clark |
|---|---|
| License | BSD-3 |
| Maintainer | athan.clark@gmail.com |
| Stability | experimental |
| Portability | GHC |
| Safe Haskell | None |
| Language | Haskell2010 |
Data.TimeMap
Contents
Description
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
Arguments
| :: 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 #