packages feed

shared-resource-cache-0.1.0.0: src/Data/SharedResourceCache/Internal/CacheItem.hs

module Data.SharedResourceCache.Internal.CacheItem (CacheItem(..), increaseSharersByOne, decreaseSharersByOne, numberOfSharers) where 
    import Control.Concurrent.STM (TVar, STM, modifyTVar')
    import Control.Concurrent.STM.TVar (readTVar)
    
    data CacheItem a = CacheItem {cacheItem :: a, connections :: TVar Int}

    increaseSharersByOne :: CacheItem a -> STM Int
    increaseSharersByOne (CacheItem item connections) = modifyTVar' connections (+ 1) >> readTVar connections

    decreaseSharersByOne :: CacheItem a -> STM Int
    decreaseSharersByOne (CacheItem item connections) = modifyTVar' connections (\item -> item - 1) >> readTVar connections

    numberOfSharers :: CacheItem a -> STM Int
    numberOfSharers (CacheItem item connections) = readTVar connections