cudd-0.1.0.0: Cudd/Hook.chs
{-#LANGUAGE ForeignFunctionInterface #-}
module Cudd.Hook (
cuddAddHook,
cuddRemoveHook,
HookTyp,
HookFP,
CuddHookType(..)
) 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.C
import Cudd.Imperative
#include <stdio.h>
#include <cudd.h>
{#enum Cudd_HookType as CuddHookType {underscoreToCase} deriving (Show, Eq) #}
type HookTyp = Ptr CDDManager -> CString -> Ptr () -> IO (CInt)
type HookFP = FunPtr HookTyp
foreign import ccall safe "Cudd_AddHook"
c_cuddAddHook :: Ptr CDDManager -> HookFP -> CInt -> IO (CInt)
cuddAddHook :: DDManager s u -> HookFP -> CuddHookType -> ST s Int
cuddAddHook (DDManager m) fp typ = unsafeIOToST $ liftM fromIntegral $ c_cuddAddHook m fp (fromIntegral $ fromEnum typ)
foreign import ccall safe "Cudd_RemoveHook"
c_cuddRemoveHook :: Ptr CDDManager -> HookFP -> CInt -> IO (CInt)
cuddRemoveHook :: DDManager s u -> HookFP -> CuddHookType -> ST s Int
cuddRemoveHook (DDManager m) fp typ = unsafeIOToST $ liftM fromIntegral $ c_cuddRemoveHook m fp (fromIntegral $ fromEnum typ)