module Util.ReferenceCount(
RefCount,
newRefCount,
newLinkedRefCount,
addRef,
remRef,
) where
import Control.Concurrent.MVar
newtype RefCount = RefCount (MVar Int)
newRefCount :: IO RefCount
newRefCount =
do
mVar <- newMVar 0
return (RefCount mVar)
newLinkedRefCount :: IO RefCount
newLinkedRefCount =
do
mVar <- newMVar 1
return (RefCount mVar)
addRef :: RefCount -> IO ()
addRef (RefCount mVar) = modifyMVar_ mVar (return . (+1))
remRef :: RefCount -> IO Bool
remRef (RefCount mVar) = modifyMVar mVar (\ count0 ->
let
count1 = count0 1
in
return (count1,count1 == 0)
)