network-control 0.1.6 → 0.1.7
raw patch · 3 files changed
+23/−7 lines, 3 files
Files
- Changelog.md +4/−0
- Network/Control/LRUCache.hs +18/−6
- network-control.cabal +1/−1
Changelog.md view
@@ -1,5 +1,9 @@ # Revision history for network-control +## 0.1.7++* Implementing setLRUCapacity.+ ## 0.1.6 * Allowing size 0.
Network/Control/LRUCache.hs view
@@ -14,6 +14,7 @@ newLRUCacheRef, cached, cached',+ setLRUCapacity, -- * Internal empty',@@ -120,17 +121,16 @@ ---------------------------------------------------------------- +-- | Mutable LRUCache. newtype LRUCacheRef k v = LRUCacheRef (IORef (LRUCache k v)) +-- | Creating 'LRUCacheRef'. newLRUCacheRef :: Int -> IO (LRUCacheRef k v) newLRUCacheRef capacity = LRUCacheRef <$> newIORef (empty capacity) -cached' :: Ord k => LRUCacheRef k v -> k -> IO (Maybe v)-cached' (LRUCacheRef ref) k = do- atomicModifyIORef' ref $ \c -> case lookup' k c of- Nothing -> (c, Nothing)- Just (v, c') -> (c', Just v)-+-- | Looking up a target and adjusting the LRU cache.+-- If not found, a new value is inserted.+-- A pair of value and "found" is returned. cached :: Ord k => LRUCacheRef k v -> k -> IO v -> IO (v, Bool) cached (LRUCacheRef ref) k io = do lookupRes <- atomicModifyIORef' ref $ \c -> case lookup' k c of@@ -142,3 +142,15 @@ v <- io atomicModifyIORef' ref $ \c -> (insert k v c, ()) return (v, False)++-- | Looking up a target and adjusting the LRU cache.+cached' :: Ord k => LRUCacheRef k v -> k -> IO (Maybe v)+cached' (LRUCacheRef ref) k = do+ atomicModifyIORef' ref $ \c -> case lookup' k c of+ Nothing -> (c, Nothing)+ Just (v, c') -> (c', Just v)++-- | Setting capacity of the LRU cache.+setLRUCapacity :: LRUCacheRef k v -> Int -> IO ()+setLRUCapacity (LRUCacheRef ref) lim = atomicModifyIORef' ref $ \c ->+ (c{lcLimit = lim}, ())
network-control.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: network-control-version: 0.1.6+version: 0.1.7 license: BSD-3-Clause license-file: LICENSE maintainer: kazu@iij.ad.jp