module Cudd.GC (
cuddEnableGarbageCollection,
cuddDisableGarbageCollection,
cuddGarbageCollectionEnabled,
c_preGCHook_sample,
c_postGCHook_sample,
regPreGCHook,
regPostGCHook
) where
import System.IO
import Foreign
import Foreign.Ptr
import Foreign.C.Types
import Foreign.C.String
import Foreign.ForeignPtr
import Control.Monad
import Control.Monad.ST
import Control.Monad.ST.Unsafe
import Cudd.Hook
import Cudd.C
import Cudd.Imperative
foreign import ccall safe "Cudd_EnableGarbageCollection"
c_cuddEnableGarbageCollection :: Ptr CDDManager -> IO ()
cuddEnableGarbageCollection :: DDManager s u -> ST s ()
cuddEnableGarbageCollection (DDManager m) = unsafeIOToST $ c_cuddEnableGarbageCollection m
foreign import ccall safe "Cudd_DisableGarbageCollection"
c_cuddDisableGarbageCollection :: Ptr CDDManager -> IO ()
cuddDisableGarbageCollection :: DDManager s u -> ST s ()
cuddDisableGarbageCollection (DDManager m) = unsafeIOToST $ c_cuddDisableGarbageCollection m
foreign import ccall safe "Cudd_GarbageCollectionEnabled"
c_cuddGarbageCollectionEnabled :: Ptr CDDManager -> IO CInt
cuddGarbageCollectionEnabled :: DDManager s u -> ST s Int
cuddGarbageCollectionEnabled (DDManager m) = unsafeIOToST $ liftM fromIntegral $ c_cuddGarbageCollectionEnabled m
foreign import ccall safe "&preGCHook_sample"
c_preGCHook_sample :: HookFP
foreign import ccall safe "&postGCHook_sample"
c_postGCHook_sample :: HookFP
regPreGCHook :: DDManager s u -> HookFP -> ST s Int
regPreGCHook m func = cuddAddHook m func CuddPreGcHook
regPostGCHook :: DDManager s u -> HookFP -> ST s Int
regPostGCHook m func = cuddAddHook m func CuddPostGcHook